2016-04-11 37 views
20

Sto provando a testare tutti gli aspetti della funzionalità di configurazione della sicurezza di rete dell'N Developer Preview. Ho la maggior parte del lavoro, ma sono sconcertato dallo scenario del certificato autofirmato.Cosa utilizziamo per Android N Configurazione di sicurezza di rete per un certificato autofirmato?

Secondo the docs, Android N dovrebbe essere soddisfatto di un file PEM o DER, come per altri scenari di convalida dei certificati. Tuttavia, non lavoro molto con i certificati autofirmati e i miei tentativi di far funzionare tutto questo continuano a essere eseguiti nelle eccezioni di convalida dei percorsi dei certificati.

Per il test, sto usando thin come server, in esecuzione sul mio computer di sviluppo, raggiungibile da un emulatore N. Il certificato autofirmato funziona per i browser sul mio computer di sviluppo e, se si passa a eseguire thin sans SSL, le app possono raggiungere il server correttamente. Quindi, non è un problema di connettività.

ho creato il certificato auto-firmato utilizzando le istruzioni this site:

sudo openssl genrsa -out "/etc/[webserver]/ssl/example.key" 2048 
sudo openssl req -new -key "/etc/[webserver]/ssl/example.key" \ 
       -out "/etc/[webserver]/ssl/example.csr" 
sudo openssl x509 -req -days 365 -in "/etc/[webserver]/ssl/example.csr" \ 
        -signkey "/etc/[webserver]/ssl/example.key" \ 
        -out "/etc/[webserver]/ssl/example.crt" 

Secondo this Stack Overflow answer, il file example.crt è un file PEM. Altrove, vedo le istruzioni per creare a "combined PEM" file. Tuttavia, ho provato entrambi, senza fortuna.

In termini di elementi di configurazione di sicurezza di rete, ho provato sia <domain-config> e <debug-overrides>. Il secondo aspetto è:

<?xml version="1.0" encoding="utf-8"?> 

<network-security-config> 
    <debug-overrides> 
    <trust-anchors> 
     <certificates src="@raw/selfsigned"/> 
    </trust-anchors> 
    </debug-overrides> 
</network-security-config> 

Tuttavia, in entrambi i casi viene visualizzato l'errore di convalida.

Che cosa esattamente dovremmo inserire come file PEM o DER, come risorsa grezza, che rende questo lavoro?

+0

Hai aggiunto 'android: debuggable = true'? –

+0

@PrerakSola: Sto provando da una serie di prodotti, ma sto sempre usando 'debug' come tipo di build. – CommonsWare

+1

Ho provato questo generando un certificato autofirmato come hai delineato e ha funzionato. Ho copiato il file example.crt, l'ho inserito nella cartella delle risorse raw e rimosso l'estensione. Penso che l'unica grande differenza è che sto eseguendo Tomcat localmente come server web. Una cosa da controllare è che hai aggiunto l'elemento meta-dati al file 'AndroidManifest.xml'. Il cert ha funzionato con uno qualsiasi di '', '', o '' nel file xml. –

risposta

7

Sembra funzionare su N Developer Preview 2, utilizzando lo example.crt generato dagli script openssl mostrati nella domanda. Per il momento, assumerò che ci sia stato un cambiamento in N Developer Preview 2 rispetto a N Developer Preview 1 che spiega la modifica.