Ich habe Schwierigkeiten, Android dazu zu bringen, mit dem OpenSSL
-Objekt eine Verbindung zu einem einfachen HttpsUrlConnection
-Server herzustellen (Ich habe StackOverflow und eine Reihe von Online-Tutorials durchgekämmt und den Beispielen so ziemlich Zeile für Zeile gefolgt Ich kann immer noch nicht herausfinden, warum meine kaputt ist, wenn ich meinen lokalen Truststore verwende.
Ich habe derzeit eine Android-Aktivität, die versucht, eine Verbindung zu einem einfachen OpenSSL server
herzustellen (ich kann mit einem OpenSSL-Client eine Verbindung zu meinem Server herstellen). Sobald% code_% aufgerufen wird, erhalte ich " HttpsUrlConnection.connect()
Vielleicht setze ich herauf meinen Beispielserver falsch?
Zu beachten:
javax.net.ssl.SSLException: Connection closed by peer" error during the SSL handshake.
gesetzt. Dinge, die ich schon versucht habe:
Android 4.1 API 16
127.0.0.1 and 10.0.2.2
SecureRandom() with the SSLContext.init()
'URL u = new URL("https", "10.0.2.2", 443, "/");'
anstelle von "X509"
TrustManagerFactory.getDefaultAlgorithms()
anstelle von "Verbindung geschlossen durch Peer" Vielen Dank im Voraus, dass Sie sich die Zeit genommen haben, meine Frage zu überprüfen!
Einfacher Server gestartet mit Befehl:
%Vor%Clientverbindung getestet mit Befehl:
%Vor%Android-Aktivitätscode (bearbeitet, um den gesamten laufenden Code zur Vereinfachung zu entfernen - bitte lassen Sie mich wissen, wenn mehr Code benötigt wird) - die Fehlerausgabe liegt unter dem Code.
%Vor%Wird ausgegeben, wenn die Verbindung zu Ссылка ordnungsgemäß hergestellt wurde:
%Vor%Ausgabe beim Versuch, eine Verbindung zu meinem Server mit selbstsigniertem Zertifikat herzustellen:
%Vor%Nochmals vielen Dank !!
Ich habe mein Problem gelöst - ich musste ein Zertifikat mit 10.0.2.2 als allgemeinen Namen (CN) verwenden, damit es mit der lokalen IP-Adresse von Android localhost von 10.0.2.2 anstelle von "localhost" oder "127.0.0.1" übereinstimmt.
Bearbeiten: Sie könnten wahrscheinlich ein Zertifikat mit localhost als CN und '127.0.0.1' und '10 .0.2.2 'als alternativen Antragstellernamen (SAN) erstellen.
Nachdem ich 10.0.2.2 cert und private key pem-Dateien erstellt hatte, konnte ich meinen Server mit dem folgenden Befehl starten:
%Vor% Wenn Sie den Client zwingen möchten, ein Zertifikat bereitzustellen (obwohl es nicht überprüft wird), fügen Sie dem obigen Befehl das Flag -Verify 1
hinzu.
Um den Server über die Befehlszeile zu testen, können Sie Folgendes verwenden (Hinweis: openssl kann über 127.0.0.1 eine Verbindung herstellen):
%Vor% Um ein Client-Zertifikat hinzuzufügen, wenn der Server es benötigt, fügen Sie die Flags -cert client-cert.pem -key client-key.pem
In meinem Android-Client habe ich den folgenden Code zum Verbinden verwendet (Fehlerüberprüfung wurde entfernt):
%Vor%Sie sollten einen Antwortcode von 200 erhalten und die Antwort von dort analysieren können.
Hier ist der Code zum Laden der Client-Anmeldeinformationen, der identisch ist mit dem Laden des Server-Keystores, aber mit einem anderen Ressourcendateinamen und einem anderen Passwort:
%Vor%Tags und Links android ssl openssl android-emulator httpsurlconnection