2015-08-20 3 views
8

Ich habe eine App, die Anrufe zu einem Web-Service über https macht. Wenn ich die apk auf meinem Telefon laufen lasse, funktioniert es großartig. Doch in dem Emulator, die alle die POST Anfragen über SSL scheitern mit:android - SSL Probleme in Android Studio Emulator, funktioniert gut auf Telefon

Read error: ssl=0xb402be00: Failure in SSL library, usually a protocol error error:100c50bf:SSL routines:ssl3_read_bytes:NO_RENEGOTIATION (external/boringssl/src/ssl/s3_pkt.c:852 0xabf7fcd7:0x00000000)

In den Zugriffsprotokollen auf unserem Server, meldet es eine 403 (Verbote), wenn der Emulator versucht, den Webservice zu schlagen, apparantly, weil die Emulator ist nicht Hand-Shaking richtig mit unserem Server. Es gibt eine Reihe von Zeilen wie diese in Apaches Fehlerprotokoll

[Thu Aug 20 12:21:21 2015] [error] [client xxx.xxx.xxx.xxx] Re-negotiation handshake failed: Not accepted by client!?

Apache tatsächlich hinzugefügt die "!?" Es sieht also nach einem ernsthaft unerwarteten Fehler aus.

In meiner IDE habe ich die Option für "Accept non-trusted Zertifikate automatisch" markiert, aber das macht keinen Unterschied.

Ich habe Lösungen im Web für die Behebung verschiedener SSL-Probleme in Android gesehen, aber sie scheinen alle das Telefon selbst ein Problem zu sein, und erfordern Code-Änderung. Da es auf dem Telefon funktioniert, scheint es, dass dies ein Android Studio-Problem ist, und ich sollte in der Lage sein, dies mit einer Konfigurationseinstellung zu korrigieren. Oder muss ich vielleicht etwas in einer Apache machen?

Fazit: Wie kann ich mit meiner App im Emulator von Android Studio mit einem SSL-Webdienst kommunizieren?

mit Studio 1.3.1, Java 1.7.0_65,

compileSdkVersion 21 
buildToolsVersion "22.0.1" 
defaultConfig { 
    applicationId "com.bla.bla" 
    minSdkVersion 14 
    targetSdkVersion 19 
    multiDexEnabled true 
    versionCode 12 
    versionName '1.2.0.8' 
+1

Sie Emulator selbst konfigurieren sollte, IDE-Konfiguration hat nichts mit dem Problem zu tun. Können Sie auf andere https-Websites zugreifen? Haben Sie Datum und Uhrzeit im Emulator richtig eingestellt? Haben Sie Genymotion probiert? – Dmide

+1

Es wird überhaupt nicht in Genymotion gestartet, ich bekomme "Fehler [INSTALL_FAILED_MISSING_SHARED_LIBRARY]" 'Datum und Uhrzeit sind korrekt. Ich weiß nicht, ob es auf andere Seiten zugreifen kann, weil es keinen Grund dazu gibt, ich bin mir nicht sicher, wie ich das in den bestehenden Code einbauen würde. – chiliNUT

+0

Wenn Ihr Ziel es ist, es auf jedem Emulator funktionieren zu lassen, nicht genau auf Standard von Google, folgen Sie diesem Thread http://stackoverflow.com/questions/20121883/how-to-install-google-play-services-in-a- -genymotion-vm-with-no-drag-and-drop-su und versuche es erneut.Dies sollte den Fehler FAILED_MISSING_SHARED_LIBRARY beheben. – Dmide

Antwort

1

Ich glaube, das liegt daran, dass der Emulator Ihre CA-Zertifikate bei jeder Ausführung zurückgesetzt.

Kasse aus diesem Beitrag auf Setting up a persistent trusted CA in an Android emulator

Bitte beachten Sie, dass die Lage der CA-Zertifikate haben in Eibisch geändert, ich werde mit einigen zusätzlichen Informationen aktualisiert werden so schnell wie möglich

+1

zu sehen. Ich fand so ziemlich nichts über dieses Thema bei Google, und ich denke, es ist weil der General Praxis ist, Ihre Entwickler-API nicht unter SSL zu haben, und nur Produktions-API unter SSL zu haben, die dieses Problem vermeiden würde. Ich bin auf diesen Artikel gestoßen, der selbst gegoogelt hat. Ich habe es noch nicht ausprobiert, aber es sieht sehr vielversprechend aus. – chiliNUT

+1

Ich schaute auf den referenzierten Artikel. Es wurde 2011 veröffentlicht, als sich die cacert.bk noch in/system/etc/security befand. Marshmallow hat jetzt ein cacert-Verzeichnis an seiner Stelle, gefüllt mit vielen Dateien mit kryptischen Namen. Noch googeln nach einer aktualisierten Methode zum Einrichten persistenter Zertifikate in Marshmallow und später. – Les

1

Ich schlage vor, Sie das Zertifikat zu vertrauen, von SSL-geschützter Server in Runtime.

Dieser Ansatz ist unabhängig von der Gerätekonfiguration und funktioniert auch für Telefon und Emulator.

Ich schrieb klein library zu tun.

Lesen Sie mehr zu diesem Thema auf meinem Blog-Post:

https://mklimek.github.io/trust-specific-certificate-on-jvm/

+0

Im Allgemeinen kann dies nützlich sein, um zukünftige Projekte so zu codieren, dass sie mit dem Emulator besser spielen. Für dieses Projekt habe ich keine Lust, irgendeinen existierenden Code zu modifizieren, nur damit er in einem Emulator funktioniert. – chiliNUT

Verwandte Themen