2017-02-09 3 views
1

Ich habe versucht, hier einige Antworten für mich zu suchen, aber ich finde nur nichts, das mein Problem löst.Volley-Bibliothek und HTTPS-Anfragen

Im Projekt, an dem ich arbeite, werden wir unsere Domain ändern. Die Änderung ist etwas schwierig - wir müssen auch die Verbindung von HTTP zu HTTPS ändern. Ich habe die .crt-Taste erhalten (sagen wir mal, Beispiel.tech.crt - ändert den gesamten Firmennamen in "Beispiel"). Nach einigen Stunden ständigen Versagens habe ich mich entschlossen, hier zu schreiben.

Zuerst habe ich versucht, dieses Tutorial http://ogrelab.ikratko.com/using-android-volley-with-self-signed-certificate/ - und es hat nicht funktioniert (ich meine nicht einmal, dass ich veraltete Apache-Bibliotheken wegen API23 verwenden musste). Falls dieser benötigt wird, das ist, wie ich BKS-Datei erstellt:

keytool -importcert -v -trustcacerts -file "example.tech.crt" -alias example_tech 
     -keystore "example_tech.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider 
     -providerpath "bcprov-jdk16-146.jar" -storetype BKS 

Dann habe ich versucht, diesen Ansatz Does Android Volley support SSL? - die einen aus bester Antwort (mit Domain-Namen Prüfung ignoriert). Ich versuchte noch BKS-Datei zu verwenden - ich habe einige Ausnahmen bekam über Fehler Gießen, also habe ich line:

CertificateFactory cf = CertificateFactory.getInstance("X.509"); 

zu

CertificateFactory cf = CertificateFactory.getInstance("X.509", "BC"); 

als irgendwo vorgeschlagen - Irrtum verharrten still. Ich habe versucht, .crt-Datei anstelle von BKS zu verwenden - ich scheitere immer noch.

Jedes Mal, wenn ich denselben Fehler:

javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: 
SSL handshake aborted: ssl=0x650f83a0: Failure in SSL library, usually a protocol error 
error:14077102:SSL routines:SSL23_GET_SERVER_HELLO:unsupported protocol 
(external/openssl/ssl/s23_clnt.c:714 0x5fda0d74:0x00000000) 

ich versuchte, mit Postman ziemlich gleiche Anfragen zu tun und sie arbeiten an derselben Adresse ohne Probleme, so ist dies kein Server-Problem. Ich habe versucht, verschiedene Domänen zu verwenden - beispiel.tech, www.example.tech, example.tech:80 und so weiter (immer mit https natürlich).

Nachfolgend findet Beispiel curl artige Anfrage (natürlich zensiert):

curl request: curl -X "POST" 
-D "grant_type=password&password=[passwordHere]&username=[emailHere]&" 
-H 'Authorization: Basic [tokenHere] 
"https://example.tech/oauth/token" 

Ich verstehe nicht, was mit meinem Code falsch ist, und ich würde wirklich glücklich sein, zu sehen, was ich hier falsch mache. Wenn noch mehr Code benötigt wird, können Sie danach fragen (aber 99% davon sind wie im zweiten Link, nur mit wirklich kleinen Änderungen).

+0

Ein .crt ist kein Schlüssel. Es ist ein Zertifikat. Irgendwo haben Sie entweder SSLv2 oder mindestens SSLv2ClientHello aktiviert. – EJP

Antwort

0

Betrachten Sie dieses Thema als Beispiel für schlechte Kommunikation. Nach Stunden der versucht, diese Arbeit zu machen, haben wir zu arbeiten:

  • wir selbstsignierten Zertifikate nicht verwenden, so dass das Hinzufügen Schlüssel zur Anwendung schreckliche Idee ist (da sie alle 3 Monate wechseln)
  • nicht unterstütztes Protokoll Ausnahme kam aus ältere Android-APIs (< 20 oder < 21), die in dieser Anwendung unterstützt werden. Von mir verstehe (in Anbetracht meiner schlechten Kenntnisse über SSL-Verbindungen) unsere Website TLS, aber ältere Android-Systeme (Pre-Lollipop ich denke) haben dies standardmäßig deaktiviert. Der richtige Weg, dies zu beheben, war das Erstellen einer benutzerdefinierten TLSSSocketFactory und deren Verwendung in HurlStack zum Initialisieren von RequestQueue. Nach dieser Ausnahme ist verschwunden.
+0

Können Sie Beispiel oder Ihren Code teilen? – aung