javax.net.ssl.SSLHandshakeException: Handshake fehlgeschlagen auf Android 5.0.0, wenn SSLv2 und SSlv3 deaktiviert sind (nur TLS) (und höher)

8

Dies ist mein erster Beitrag und ich werde versuchen, mein Bestes zu geben, um so klar wie möglich zu sein (Entschuldigung für mein Englisch).

Hier ist mein Problem, ich benutze Retrofit: 1.9.0 und okhttp: 2.7.5, um API-Aufruf durchzuführen. Alles war in Ordnung, bis mein Server-Provider SLLv2 und SSLv3 aufgrund von Problemen mit der Sicherheit deaktivierte (Drown fehlgeschlagen am ersten März).

Jetzt überprüfe ich die Informationen über meinen Provider und er erlaubt nur TLSv1 mit Cypher (TLS 1.0 TLS_RSA_WITH_3DES_EDE_CBC_SHA No FS) von Ссылка .

Ok, das sind alle Tests, die ich gemacht habe und Ergebnisse:

[UPDATE PROBLEM SOLVED]

Finden Sie einen Weg, um dieses Problem in meiner zweiten Antwort zu lösen.

UPDATE Es scheint, dass die Probleme von der Google API-Version kommen. Wenn ich auf API 18 teste, funktioniert alles gut. Wenn es unter Android 5.0 oder höher läuft, schlägt es fehl.

Erster Test

Konf. Zusammenfassung:

  • compileSdkVersion 23
  • buildToolsVersion '23 .0.2 '
  • minSdkVersion 18
  • targetSdkVersion 21
  • Nachrüstung: 1.9.0
  • okhttp: 2.7.5
  • Android-Version & gt; 5.0.0 (aber es ist das gleiche auf jedem Gerät ...)

Rest-Client (LoginRestClient):

%Vor%

Funktion zum Erstellen des Clients OkHttpClient getConnectionHttpClient ()

%Vor%

Ergebnis in öffentlichem ungültigem Fehler (RetrofitError-Fehler) von benutzerdefiniertem CallBack

java.net.UnknownServiceException: Konnte keine akzeptablen Protokolle finden. isFallback = false, Modi = [ConnectionSpec (cipherSuites = [TLS_RSA_WITH_3DES_EDE_CBC_SHA], tlsVersions = [TLS_1_0], unterstütztTlsExtensions = true)], unterstützte Protokolle = [SSLv3, TLSv1, TLSv1.1, TLSv1.2]

Zweiter Test

Ich habe eine benutzerdefinierte SSLSocketFactory erstellt, um SSLv3 zu deaktivieren und TLS zu erzwingen:

%Vor%

Ich benutze es so:

%Vor%

Ergebnis in öffentlichem ungültigem Fehler (RetrofitError-Fehler) von benutzerdefiniertem CallBack

javax.net.ssl.SSLProtocolException: SSL-Handshake abgebrochen: ssl = 0x7f87885280: Fehler in der SSL-Bibliothek, normalerweise ein Protokollfehler Fehler: 14077410: SSL-Routinen: SSL23_GET_SERVER_HELLO: SSLV3-Alert-Handshake-Fehler (extern / openssl / ssl / s23_clnt.c: 770 0x7f87c2fdf0: 0x00000000)

Wenn mir jemand helfen kann, wird es sehr cool sein. Alle meine Apps sind ausgefallen und ich kämpfe seit gestern Morgen gegen dieses Problem, um meine Dienste wiederherzustellen. Ich entferne meine Haare eins nach dem anderen ...

Vielen Dank im Voraus.

    
kevzzz 04.03.2016, 12:04
quelle

1 Antwort

13

PROBLEM BEHOBEN:

Hallo alle zusammen nach 3 Tagen und Nächten hier ist die endgültige Lösung. Also dank der Lösung hier:

Wie SSLv3 in Android für HttpsUrlConnection deaktivieren?

und diese Bibliothek: Ссылка

Es ermöglicht, Android eine bessere Möglichkeit zu geben, mit Chiffre und TLS zu arbeiten, falls SSLv2 und SSlv3 deaktiviert sind.

Erstellen Sie zuerst diese Klasse NoSSLv3SocketFactory.java und koppeln Sie diese mit einer CypherUrl-Verbindung, indem Sie einen Konstruktor wie diesen erstellen

%Vor%

NoSSLv3SocketFactory.java (vollständiger Code)

%Vor%

und jetzt (in meinem Fall mit Retrofit) benutze es einfach so:

Also zuerst, Fügen Sie eine statische Methode hinzu (oder wie Sie es bei der Verwendung erstellen möchten), um einen okHttpClient mit unserer zuvor erstellten NoSSlv3Factory.java-Klasse zu erstellen.

%Vor%

Dann , in meinem Fall, wenn Sie Ihren RestAdapter erstellen, machen Sie es einfach so, und vergessen Sie nicht, Ihren Client einzustellen.

%Vor%

Damit sollte es funktionieren. Ich hoffe, dass es für jemand anderen nützlich sein wird.

    
kevzzz 06.03.2016, 12:28
quelle

Tags und Links