com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted:
Ich bin mit Volley-Bibliothek in Android in meiner Anwendung, und wenn Sie versuchen, um POST-requests an unsere server bekomme ich die folgende Fehlermeldung:
com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x6821edb0: Failure in SSL library, usually a protocol error
error:1407743E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert inappropriate fallback (external/openssl/ssl/s23_clnt.c:744 0x5f4c0c46:0x00000000)
Unser server wurde mit den folgenden SSL-Zertifikat:
i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA
1 s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA
i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
2 s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
Dem Zertifikat beschrieben ist, die von openssl wie folgt:
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Überprüfte ich die Chiffre über Android-fähige Chiffren und Sie sagen, es ist standardmäßig aktiviert.
Ich habe versucht die folgende Lösung für dieses problem, aber keiner von Ihnen gelöst:
HTTPS-Unterstützung für Volley Android-networking-Bibliothek - funktioniert nicht (auch nicht für mich geeignet, da es nicht sicher)
So deaktivieren Sie SSLv3 in android für HttpsUrlConnection? - Ich habe dies ausprobiert, der Fehler tritt weiterhin auf,
Die Android-Api verwendet in out Projekt ist Android 5.1 API (22).
Die Volleyball-Bibliothek-version ist 1.0.15 (habe Auch versucht mit der neuesten eins, 1.0.18 aber das Problem immer noch Auftritt).
Einer anderen Lösung, die ich versucht habe war mit okhttp Bibliothek, integriert mit Volleyball, aber das Problem tritt weiterhin auf.
Jede funktionierende Lösung wäre sehr geschätzt werden.
Vielen Dank im Voraus!
UPDATE
Durch die Art und Weise, schaffte ich es, unterstützt Verschlüsselungen von dem server:
Supported cipher suites (ORDER IS NOT SIGNIFICANT):
SSLv3
RSA_WITH_RC4_128_MD5
RSA_WITH_RC4_128_SHA
RSA_WITH_IDEA_CBC_SHA
RSA_WITH_3DES_EDE_CBC_SHA
DHE_RSA_WITH_3DES_EDE_CBC_SHA
RSA_WITH_AES_128_CBC_SHA
DHE_RSA_WITH_AES_128_CBC_SHA
RSA_WITH_AES_256_CBC_SHA
DHE_RSA_WITH_AES_256_CBC_SHA
RSA_WITH_CAMELLIA_128_CBC_SHA
DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
RSA_WITH_CAMELLIA_256_CBC_SHA
DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
TLS_RSA_WITH_SEED_CBC_SHA
TLS_DHE_RSA_WITH_SEED_CBC_SHA
(TLSv1.0: idem)
(TLSv1.1: idem)
TLSv1.2
RSA_WITH_RC4_128_MD5
RSA_WITH_RC4_128_SHA
RSA_WITH_IDEA_CBC_SHA
RSA_WITH_3DES_EDE_CBC_SHA
DHE_RSA_WITH_3DES_EDE_CBC_SHA
RSA_WITH_AES_128_CBC_SHA
DHE_RSA_WITH_AES_128_CBC_SHA
RSA_WITH_AES_256_CBC_SHA
DHE_RSA_WITH_AES_256_CBC_SHA
RSA_WITH_AES_128_CBC_SHA256
RSA_WITH_AES_256_CBC_SHA256
RSA_WITH_CAMELLIA_128_CBC_SHA
DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
DHE_RSA_WITH_AES_128_CBC_SHA256
DHE_RSA_WITH_AES_256_CBC_SHA256
RSA_WITH_CAMELLIA_256_CBC_SHA
DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
TLS_RSA_WITH_SEED_CBC_SHA
TLS_DHE_RSA_WITH_SEED_CBC_SHA
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
Von was ich gelesen habe , sollte es kein problem sein mit diesen Verschlüsselungen, die auf API LVL 22.
- Ist Ihr Zertifikat Hinzugefügt, um die Liste der vertrauenswürdigen Zertifikate auf dem Gerät?
- Wie gesagt, ich habe die Verschlüsselung(DHE-RSA-AES256-SHA) und Android, sagte, dass es enebled standardmäßig in der API-Ebene 22. Auch das Zertifikat ist die CA vertrauenswürdig ist, so ist es sollte auf allen Geräten funktionieren und es sollte keine Notwendigkeit, um es hinzuzufügen, die speziell in die app
- Ich hoffe, dass Sie eine Lösung finden können unter Android 5.0 Verhaltensänderungen - TLS/SSL-Standard Konfiguration-Änderungen
- Vielen Dank für den Hinweis. Ich lese, was es alles gibt, konnte nicht finden eine Lösung.
- Ich denke, Sie sollten auch prüfen, server-side-code und web-server und/oder das OS. Wenn IIS, versuchen Sie Annehmen oder Ignorieren, in den SSL-Einstellungen.
- Dies löste mein Problem. stackoverflow.com/a/33874126/793880
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe das problem gefunden nach Stunden der Suche durch das Internet und project code:
Innerhalb des Projekts habe ich eine Klasse namens
JsonToPOJORequest<T>
sich die Volleyball-KlasseJsonRequest<T>
.Dies ist die Klasse, die eigentlich macht die Anforderung für jeder Methode auf dem server.
Nach der Analyse der code ein wenig, fand ich einen Aufruf der Methode Konstruktor, wie folgt:
wo
DefaultRetryPolicy.DEFAULT_TIMEOUT_MS
gesetzt ist 2500 ms.Weil die POST-Anfrage hatte eine Menge von Daten, es braucht mehr Zeit, um die Anfrage zu senden und erhalten die Antwort zurück vom server.
Scheint es, dass Volleyball nicht warten genug, die Antwort zu kommen und wirft einen TimeoutError.
So, die Anfrage wurde gemacht, alles gut geht auf dem server, aber der client(Android) nicht warten für den server und bekommt eine Fehlermeldung.
Die Lösung: setzen Sie den Timeout-parameter höher oder 0, wie folgt:
Den zwei Fragen, die bleiben sind:
1) Warum dauert es so lange, um die Anfrage? -> 3*2500 = 7500ms ist eine ziemlich lange Zeit(über 7 Sekunden) eine Anfrage zu stellen. Und dies ist nicht ein server-problem, da auf iOS funktioniert es Prima.
2) Warum gilt das VolleyError Aussehen?
Sollte TimeoutError und nicht NoConnectionError.
Finden Sie weitere Informationen zu diesem bug hier, habe ich das auch abgeleitet, die Lösung:
Android-Volley-Doppel-post, wenn nur eine langsame Anfrage
https://groups.google.com/forum/#!Thema/volley-Benutzer/8PE9dBbD6iA
Die Lösung ist die Erhöhung der Anforderung Zeitüberschreitung der Salve, indem Sie diese Zeile code.
Anfrage.setRetryPolicy(neue DefaultRetryPolicy(10 * 1000, 0,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
oben genannten code-Einstellung " Anfrage-timeout auf 10 Sekunden.