2012-05-21 15 views
8

Tengo un problema con WebView nativo en Android. Necesito autenticarme con un sitio usando un certificado de cliente SSL. Android WebView no parece ser compatible con esto. Como solución he usado una versión modificada de la vista Web:WebView con certificado de cliente SSL en Android 4 ICS

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

El WebView modificado funciona mediante la inyección de un SSLSocketFactory correctamente configurado en el WebView estándar de Android. Esto funciona bien en dispositivos Android 2.x. Sin embargo, con Android 4 ICS ya no funciona. El SslSocketFactory todavía está allí en ICS, sin embargo, parece que ya no se usa.

Así que mi pregunta es: ¿alguien ha tenido éxito al configurar Android WebView en ICS para que funcione con un certificado de cliente? ¿O hay alguna alternativa?

lo que ya intentado:

  • importar el certificado de cliente SSL en el almacén de claves de Android y sólo usar la vista Web sin ninguna modificación. Esto no funciona, el certificado del cliente no se envía junto con las solicitudes. Sin embargo, funciona en el navegador nativo.

  • creando la conexión SSL usando HttpClient, obteniendo el código HTML del sitio y entregándolo a WebView. Esto básicamente funciona, pero necesito interceptar todas las solicitudes hechas por WebView y manejarlas yo mismo. Sin embargo, WebView no proporciona los datos de las solicitudes POST, lo que hace que este enfoque no sea utilizable para mí.

+0

La Autorización de certificado de cliente parece estar arreglada en 4.0 según [este comentario] (http://code.google.com/p/android/issues/detail?id=8196#c70). Mira el enlace en ese comentario para las instrucciones de uso. – Rajesh

+0

Sí, está corregido para el navegador independiente. Mi problema es que quiero usar la autorización del certificado del cliente dentro de una WebView incrustada en mi propia aplicación. – chriz

Respuesta

3

creo que lo que quiere es sobrescribir el siguiente método oculto:

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

se entenderá que éste cancle la solicitud.

He utilizado este método siguiendo este ejemplo para el uso de las API ocultos: http://devmaze.wordpress.com/2011/01/19/using-com-android-internal-part-5-summary-and-example/

Lo siento por la tarde respuesta. Acabo de tropezar con su pregunta ... Espero que todavía ayude.

Cuestiones relacionadas