2015-08-20 12 views
8

Ho un'app che effettua chiamate a un servizio web tramite https. Quando eseguo l'apk sul mio telefono, funziona alla grande. Tuttavia, nell'emulatore, tutti i POST richieste oltre SSL falliscono con:android - Problemi SSL nell'emulatore di Android Studio, funziona perfettamente sul telefono

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)

Nei registri di accesso sul nostro server, segnala un 403 (Forbidden) ogni volta che l'emulatore cerca di colpire il webservice, pare perché il l'emulatore non è che si agita correttamente con il nostro server. C'è un sacco di righe come questa nel log degli errori di apache

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

Apache ha effettivamente aggiunto il "!?" quindi sembra un errore gravemente inaspettato.

Nel mio IDE, ho spuntato l'opzione per "Accetta certificati non attendibili automaticamente" ma ciò non fa differenza.

Ho visto soluzioni sul Web per risolvere vari problemi SSL in Android, tuttavia, sembrano tutti essere il telefono stesso con un problema e richiedono la modifica del codice. Dal momento che funziona correttamente sul telefono, sembra che si tratti di un problema con Android Studio e dovrei essere in grado di correggerlo con un'impostazione di configurazione. O forse devo fare qualcosa in un apache?

Bottom line: In che modo è possibile far parlare la mia app con un servizio web SSL nell'emulatore di Android Studio?

Uso di 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

è necessario configurare emulatore per sé, la configurazione IDE non ha nulla a che fare con il problema. Puoi accedere ad altri siti Web https? Hai impostato correttamente la data e l'ora sull'emulatore? Hai provato Genymotion? – Dmide

+1

non si avvierà affatto in Genymotion, ricevo '" Errore [INSTALL_FAILED_MISSING_SHARED_LIBRARY] "" la data e l'ora sono corrette. Non so se può accedere ad altri siti perché non ha alcun motivo per, non sono sicuro di come funzionerei nel codice esistente. – chiliNUT

+0

Se il tuo obiettivo è farlo funzionare su qualsiasi emulatore, non esattamente su predefinito da google, segui questa discussione http://stackoverflow.com/questions/20121883/how-to-install-google-play-services-in-a -genymotion-vm-with-no-drag-and-drop-su e riprova.Questo dovrebbe risolvere l'errore FAILED_MISSING_SHARED_LIBRARY. – Dmide

risposta

1

Credo che questo sia perché l'emulatore ripristinerà i certificati di CA ogni volta che viene eseguito.

Acquista questo post su Setting up a persistent trusted CA in an Android emulator

Si prega di essere consapevole del fatto che la posizione dei Certs CA sono cambiate in Marshmallow, aggiornerò con alcune informazioni aggiuntive ASAP

+1

Non ho trovato praticamente nulla su questo argomento su google, e penso che sia perché il generale la pratica è di avere la tua API di sviluppo non sotto SSL, e solo avere API di produzione sotto SSL, che eviterebbe questo problema. Mi sono imbattuto in quell'articolo facendo il mio googling. Non l'ho ancora provato, ma sembra molto promettente. – chiliNUT

+1

Ho guardato l'articolo di riferimento. È stato pubblicato nel 2011 quando cacert.bk era ancora in/system/etc/security. Marshmallow ora ha una directory cacert al suo posto, piena di molti file con nomi criptici. Ancora googling per un metodo aggiornato per l'impostazione di certificati persistenti in Marshmallow e versioni successive. – Les

1

vi consiglio di considerare attendibile il certificato da Server protetto SSL in runtime.

Questo approccio è indipendente dalla configurazione del dispositivo e funziona bene anche per telefono ed emulatore.

Ho scritto piccolo library per farlo.

Per saperne di più su questo argomento nel mio blog:

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

+0

In generale, questo potrebbe essere utile per codificare i progetti futuri in modo da renderli più piacevoli con l'emulatore. Per questo progetto, non ho alcun desiderio di modificare alcun codice esistente solo così funzionerà in un emulatore. – chiliNUT

Problemi correlati