HTTPS SSL Verbindung im HttpClient (Zertifikat einbinden)

  • Antworten:18
Bastian Seidemann
  • Forum-Beiträge: 137

02.05.2015, 13:16:52 via Website

Hallo zusammen,

Ich hoffe ihr könnt mir weiterhelfen.

Ich habe einen Strato Server auf dem ich jetzt SSL aktiviert habe. Das funktioniert im Browser auch super und er bekommt ein Zertifikat zugewiesen.

Dieses Zertifikat habe ich mir exportiert (*.cer Datei) und in eine BKS umgewandelt.

Kann ich diese BKS jetzt als Trusted Zertifikat in meinen HttpClient einbinden um damit per HTTPS auf meinen Server zuzugreifen? (Beispielsweise auf eine PHP mit POST oder GET).

Und wenn ja wie?

Vielen Dank im Vorraus!

:)

Antworten
Bastian Seidemann
  • Forum-Beiträge: 137

02.05.2015, 17:15:44 via Website

Okay danke.

Bei der Nutzung von Openssl bekomme ich:

No peer Certificate available

No Client Certificate CA names sent

Antworten
Ju Ku
  • Forum-Beiträge: 72

08.05.2015, 13:02:30 via Website

Wenn du SSL nutzt, wird dem Client das SSL Certificate eig. vom Server übergeben.
Auch der HTTPClient sollte eine Möglichkeit besitzten, dies zu nutzen, wieso willst du das SSL Certificate so in der App speichern?

Antworten
Bastian Seidemann
  • Forum-Beiträge: 137

08.05.2015, 13:05:03 via Website

Weil er den Fehler "no peer certificate " wirft :O

Antworten
Ju Ku
  • Forum-Beiträge: 72

08.05.2015, 15:42:05 via Website

Hast du einen Stacktrace?
Du musst ssl im HTTPClient erst konfigurieren, damit er das Certifacte herunterlädt.

Antworten
Bastian Seidemann
  • Forum-Beiträge: 137

08.05.2015, 15:44:28 via Website

Okay und wie mach ich das?

Antworten
Ju Ku
  • Forum-Beiträge: 72

08.05.2015, 15:48:30 via Website

Markus B.

Hi,
Stack Overflow fragen:
http://stackoverflow.com/a/6378872/1773371

Sollte exakt das sein was du suchst.

Gruß,
Markus

Ich glaube wenn du die Lösung von Stackoverflow verwendest, müsste es gehen.

    KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
    trustStore.load(null, null);

    MySSLSocketFactory sf = new MySSLSocketFactory(trustStore);
    sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

    HttpParams params = new BasicHttpParams();
    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
    HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);

    SchemeRegistry registry = new SchemeRegistry();
    registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
    registry.register(new Scheme("https", sf, 443));

    ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);

    HttpClient client = new DefaultHttpClient(ccm, params);

Du akzeptierst dabei mit sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER) alle SSL Certificates und prüfst vorher nicht, ob dieses Certificate auch gültig ist.

Antworten
Bastian Seidemann
  • Forum-Beiträge: 137

08.05.2015, 16:10:15 via Website

Birgt das dann nicht ein Risiko?

Antworten
Ju Ku
  • Forum-Beiträge: 72

08.05.2015, 19:28:13 via Website

Du kannst auch eine Verifizierung verwenden, müsstest diese aber wahrscheinlich selbst implementieren.
Jeder Browser hat seine eigene Verifizierung, deshalb unterstützt der eine Browser manchmal auch ein SSL Certificate und ein anderer nicht.

Antworten
Bastian Seidemann
  • Forum-Beiträge: 137

08.05.2015, 19:32:08 via Website

Ich habe den Code von oben versuch

05-08 19:29:39.519: E/error(10672): FEHLERBESCHREIBUNGjavax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x762e04b0: Failure in SSL library, usually a protocol error
05-08 19:29:39.519: E/error(10672): error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 unrecognized name (external/openssl/ssl/s23_clnt.c:741 0x74936d74:0x00000000)

Antworten
Ju Ku
  • Forum-Beiträge: 72

09.05.2015, 12:48:03 via Website

Dann stimmt etwas mit dem Protocoll oder der library nicht.
SSL23_GET_SERVER_HELLO:tlsv1 unrecognized name deutet wahrscheinlich darauf hin, dass irgendeine Angabe in dem Certificate fehlt.

Antworten
Bastian Seidemann
  • Forum-Beiträge: 137

09.05.2015, 12:58:41 via Website

Puh ich weiß nicht was ich da prüfen kann

Antworten
Ju Ku
  • Forum-Beiträge: 72

09.05.2015, 13:04:35 via Website

Hast du das Certificate gekauft oder selbst erstellt?
Kannst du dieses mal hochladen?

Antworten
Bastian Seidemann
  • Forum-Beiträge: 137

09.05.2015, 13:17:03 via Website

Ich habe einen STRATO Server auf dem ich SSL aktiviert habe und via httpclient POSTS auf den Server ausführe. Und das soll via SSL passieren

Antworten
Ju Ku
  • Forum-Beiträge: 72

09.05.2015, 13:24:16 via Website

Du hast also noch gar kein SSL Certificate hinzugefügt?
Wenn du das SSL Certificate dort noch nicht hochgeladen oder direkt dort gekauft hast, dann kann der Server keine SSL Verschlüsselung nutzen.

Antworten
Bastian Seidemann
  • Forum-Beiträge: 137

09.05.2015, 13:29:23 via Website

Gekauft hab ich das Zertifikat und auch zu meiner Website hinzugefügt und aktiviert. Wie kann ich das prüfen wie der Status aktuell ist?

Antworten
Ju Ku
  • Forum-Beiträge: 72

09.05.2015, 14:39:23 via Website

Du kannst auf https://www.digicert.com/help/ überprüfen, ob SSL richtig eingerichtet ist.
Wenn dort das Certificate erkannt wird, liegt es an der library.

Antworten
Bastian Seidemann
  • Forum-Beiträge: 137

09.05.2015, 14:50:33 via Website

image

Da scheint alles in Ornung zu sein

Antworten