2017-09-20 2 views
0

Ich habe auf meinen Händen eine Android-App, Targeting-SDK-Ebene 21. Darin versuche ich eine Verbindung zu AWS' alive.json mit java.net.HttpURLConnection.Android HTTPS-Verbindung zu AWS/alive.json hängt

Die Vertrauenskette sieht so aus:

  • Baltimore Cybertrust Root (von dev Gerät vertraut)
  • DigiCert Baltimore CA-2 G2 (dev Gerät DigiCert Assured ID des Start G2 vertraut, Globaler Root CA Global root G2 unter anderem DigiCerts - ist dies ausreichend)
  • AWS (* .us-Ost-etc.amazonaws.com)

Mein AndroidManifest.xml verfügt <uses-permission android:name="android.permission.INTERNET"/>?.

Der Code [läuft auf] das Folgende hinaus. Es wird in einem separaten Thread aufgerufen (der Anfragen nacheinander ausführt - von NDK aus gibt es gerade diese).

// init() -- all optional 
    System.setProperty("http.keepAlive", "false"); 
    HttpURLConnection.setDefaultAllowUserInteraction(false); 

    // makeRequest(HttpRequest request) 
    URL url = new URL(request.url); 
    HttpURLConnection http = (HttpURLConnection) url.openConnection(); 
    http.setUseCaches(false); 
    http.setReadTimeout(timeoutMs); 
    http.setChunkedStreaingMode(0); // optional 
    http.setDoInput(true); 
    http.setRequestMethod("GET"); // optional 
    http.setRequestProperty("X-Correlation-ID", x); // optional 
    http.connect(); 

Nun, wenn ich das Timeout auf 80 ms gesetzt, werde ich eine javax.net.ssl.SSLHandshakeException: SSL handshake timed out bekommen. Darüber hinaus (800ms) wird es für immer in http.connect() hängen.

https://developer.android.com/training/articles/security-ssl.html#HttpsExample und die umliegenden Artikel Details, wie dies getan werden sollte. Mein Verständnis ist, dass ich für diese Übung kein Zertifikat pinning benötigen sollte.

Wenn ich eine hinzufügen (in den Zeilen des obigen Artikels), bekomme ich eine .

Verbinden mit einer http: // Ressource funktioniert gut.

Was mache ich falsch? Welche zusätzliche Konfiguration benötigt meinerseits und warum?

UPDATE:

1, OkHttp basierte Implementierung zeigt genau das gleiche Verhalten.

2, Certificate pinning hat nicht dazu beigetragen, das Problem zu umgehen. Beachten Sie, dass dies nur eine verzweifelte Maßnahme ist und nicht etwas für die Produktion - offensichtlich wollen wir nicht brechen, wenn Amazon-Zertifikate aktualisiert werden.

+0

Haben Sie bereits die 3 möglichen Probleme auf dem von Ihnen gemeldeten Link überprüft? – firegloves

+0

Es scheint mir der falsche Weg und ich sollte keine benutzerdefinierte SSL-Konfiguration benötigen. FWIW, ich habe überprüft. Aus der Vertrauenskette habe ich den Schluss gezogen, dass es nicht # 1 ist. Ich habe jedoch ein selbstsigniertes Zertifikat verwendet (sollte nicht), was # 2 verursachen könnte. # 3 - 'openssl s_client -connect s3.us-east-2.amazonaws.com: 443' gibt mir https://pastebin.com/vZcP4yjz, und Baltimore CyberTrust Root wird von meinem Gerät vertraut. Es erklärt nicht den Hang. – zyndor

+0

Haben Sie jemals diese CA-Zertifikate verwendet? Vielleicht # 1 Problem in diesem Fall? "Es könnte sein, dass Sie ein Zertifikat von einer neuen Zertifizierungsstelle haben, das Android noch nicht vertraut". Ich kann keinen anderen Grund herausfinden – firegloves

Antwort

0

D'oh. Mach das nicht [auf Android]; Verwenden Sie http://s3.us-east-2.amazonaws.com/static-us-east/alive.json, nicht https://.