So deaktivieren Sie SSLv3 in android für HttpsUrlConnection?
Schrieben wir die client-Anwendung in android, die Verbindung mit https-Servern mittels HttpsUrlConnection apis. Wegen der Poodle-Verwundbarkeit, die wir brauchen, zu deaktivieren SSLv3 aus der Liste der aktivierten Protokolle, während das aufrufen einer Anfrage.
Folgten wir der Richtlinien erfasst, die von oracle als http://www.oracle.com/technetwork/java/javase/documentation/cve-2014-3566-2342133.html
Hinzugefügt und folgende Zeile vor dem Aufruf der url-Verbindung
java.lang.System.setProperty("https.protocols", "TLSv1");
Diese Lösung funktioniert gut mit normalen java-Programm. Wir haben SSLHandShakeException, wenn Sie versucht haben, eine Verbindung mit einem server funktioniert nur auf SSLv3-Protokoll.
Aber die Sorge ist : gleiche Update funktioniert nicht für android. Bin ich etwas fehlt, oder sollte ich versuchen einen anderen Ansatz für android? Bitte vorschlagen.
- haben Sie versuchen, erstellen Sie Ihre eigene SSLContext und gehen seine SocketFactory der HttpsUrlConnection ?
- Kann man teilen eine service-url unterstützt nur SSLv3-Verbindung?
- Hallo Selvin,nicht versucht, mit SSLContext. Ich werde versuchen, und aktualisieren Sie. Die schnelle Zeiger/code-snippet wird groß sein.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Inspiriert von Bhavit S. Sengar ist Antwort es gebündelt, dass die Technik sich in eine tote einfache Methode. Sie können die NetCipher Bibliothek-ein modernes TLS config bei der Verwendung von Android ist
HttpsURLConnection
. NetCipher konfiguriert dieHttpsURLConnection
Instanz zu verwenden, die am besten unterstützt TLS version, entfernt SSLv3-Unterstützung, und konfiguriert die beste suite von Chiffren für die TLS-version. Zunächst fügen Sie es zu Ihrem bauen.gradle:Oder Sie können download der netcipher-1.2.jar und Sie direkt in Ihre app. Dann, anstatt zu telefonieren:
Nennen das:
NoSSLv3SocketFactory
android-20
ist die erste Android-version zur Unterstützung von TLS v1.1 und v1.2. developer.android.com/reference/javax/net/ssl/SSLEngine.htmlcompile 'info.guardianproject.netcipher:netcipher-okhttp3:2.0.0-alpha1'
Zuerst habe ich versucht Bhavit S. Sengar ist Antwort und es hat funktioniert für die meisten Fälle. Aber manchmal gibt es wo Probleme, auch wenn SSLv3-Protokoll wurde entfernt Aktivierte Protokolle auf einem Android 4.4.4-Gerät. Also die NetCipher Bibliothek von Hans-Christoph Steiner ist ideal, um dieses problem zu lösen soweit ich testen konnte, es.
Verwenden wir jsoup, um eine Reihe von web-scraping auf verschiedenen Servern, so dass wir nicht gesetzt
HttpsURLConnection connection = NetCipher.getHttpsURLConnection(sourceUrl);
. Ich nehme an, dass ist das gleiche problem, wenn Sie OkHttp.Die beste Lösung wir gekommen sind, ist die
info.guardianproject.netcipher.client.TlsOnlySocketFactory
aus NetCipher alsDefaultSSLSocketFactory
in einem static-block. So ist für die gesamte Laufzeit unserer app:Wenn Sie möchten zu prüfen die vollständigen details (mit
trustAllCertificates
), Sie können es tun hier.TLSv1.2
?verwenden Sie dieses code-snippet, wenn server SSLv3 aktivieren, dann wird es scheitern handshaking.
javax.net.ssl.SSLProtocolException: SSL handshake failed
Fehler.Verbindung mit https-server, die wir brauchen-Zertifikat im Handshake vom client-Seite. 1 Jahr wieder löste ich ein ähnliches Problem mit self-sign Zertifikat in der folgenden Weise-
Verwendung in client-seitig vor HttpsUrlConnection
hoffentlich wird es funktionieren 🙂
HttpsURLConnection mittels TSL erstellen Sie eine Sicherheits-Fehler, die Android-Umsetzung zurückgreifen, um SSLV3-Verbindung.
Bitte wenden Sie sich mit diesem http://code.google.com/p/android/issues/detail?id=78431
Mit PlayService publisher-client-Bibliotheken läuft auf Android ich habe das gleiche problem beim ausführen des Beispiel.
Fixierte es mit @bhavit-s-sengar die awnser oben. Musste auch ändern
AndroidPublisherHelper.newTrustedTransport()
dieser:Wir eigentlich gar nicht brauchen, deaktivieren des SSLV3 oder TLSV1.0, Was wir gerade brauchen, um TLSV1.1 oder TLSv1.2 in android < 5 Geräte.
Das problem ist TLSv1.1 und TLSv1.2 nicht aktiviert auf Android <5 (default) und eine Verbindung über diese neueste secure-Protokoll müssen wir aktivieren in Android <5 Geräte.
Diese Lösung beseitigt mein problem : https://stackoverflow.com/a/45853669/3448003