2012-05-21 25 views
8

Ho un problema con il WebView nativo su Android. Ho bisogno di autenticarsi con un sito usando un certificato client SSL. Android WebView non sembra supportare questo. Per aggirare il problema ho usato una versione modificata del WebView:WebView con certificato client SSL su Android 4 ICS

https://github.com/yonekawa/webview-with-client-certificate

Il WebView modificata funziona iniettando una SslSocketFactory correttamente configurato in WebView standard di Android. Funziona bene su dispositivi Android 2.x. Tuttavia, con Android 4 ICS non funziona più. SslSocketFactory è ancora presente in ICS, tuttavia, sembra che non sia più utilizzato.

Quindi la mia domanda è: qualcuno è riuscito a configurare Android WebView su ICS in modo che funzioni con un certificato client? O c'è qualche alternativa?

Quello che ho già provato:

  • importare il certificato client SSL nell'archivio chiavi Android e semplicemente utilizzando il WebView senza alcuna modifica. Questo non funziona, il certificato del cliente non viene inviato insieme alle richieste. Funziona nel browser nativo, però.

  • creazione della connessione SSL utilizzando HttpClient, ottenendo l'HTML del sito e passandolo a WebView. Questo funziona fondamentalmente, ma ho bisogno di intercettare tutte le richieste fatte da WebView e gestirle da solo. Tuttavia, WebView non fornisce i dati delle richieste POST, il che rende questo approccio inutilizzabile per me.

+0

L'autorizzazione del certificato client sembra essere impostata su 4.0 come in [questo commento] (http://code.google.com/p/android/issues/detail?id=8196#c70). Controlla il link in quel commento per le istruzioni di utilizzo. – Rajesh

+0

Sì, è stato risolto per il browser standalone. Il mio problema è che voglio utilizzare l'autorizzazione del certificato client all'interno di una WebView incorporata nella mia applicazione. – chriz

risposta

3

penso che ciò che si vuole è prevalente il seguente metodo nascosto:

public void onReceivedClientCertRequest(WebView view, 
ClientCertRequestHandler handler, String host_and_port) { 

Di default questo sarà cancle la richiesta.

Ho usato questo metodo seguendo questo esempio per l'utilizzo di API nascoste: http://devmaze.wordpress.com/2011/01/19/using-com-android-internal-part-5-summary-and-example/

Ci scusiamo per il ritardo di risposta. Sei inciampato nella tua domanda ... Spero che aiuti ancora.

Problemi correlati