Vista web android con certificado de cliente
He intentado por días para utilizar una vista web con un certificado de cliente incrustado en la aplicación, pero me parece que el sdk android no proporciona ninguna manera de hacerlo, hay una devolución de llamada para interceptar el desafío enviado por el servidor? Hay una manera de usar webview con un certificado de cliente y hacer https solicitud?
- Android webview: detecte una larga pulsación en <a> y <img>
- Cómo trabajar alrededor de la demora / lento WebView representación que se produce en algunos dispositivos?
- Android - CoordinatorLayout / NestedScrollView / Hide-Show Toolbar / Problema con WebView
- La vista web de Android no muestra google maps
- Actividad de Android como diálogo, pero sin una barra de título
- Android WebView no puede cargar archivos de video locales
- Autorizar al usuario en el sitio web de Google en WebView mediante un diálogo
- Color de fondo de Android WebView
- Acceder a la respuesta JSON desde la vista web de android
- Android - Cómo mostrar las direcciones en la vista web
- Comportamiento de vista Web con Galaxy S cargar página web toma edades
- La autenticación de Dropbox deja abierto el navegador
- Android 2.3 Soporte hebreo en Webview
Ya que estoy interesado en su problema también, he comprobado la documentación de WebView y WebViewClient, navegó alrededor y de hecho parece que no se puede autenticar una sesión de webview utilizando un certificado de cliente, como el método necesario (ClientCertRequestHandler) no es un API pública.
Uso de una WebView de Android para conectarse a un servidor seguro con un certificado de cliente
Una búsqueda en las discusiones de seguridad de Android confirma que la llamada no está disponible:
https://groups.google.com/forum/#!msg/android-security-discuss/0hzTGaA9swQ/1Oqc8UpGLH8J
y aunque
La versión para Android 4.0 incluye soporte para la autenticación de certificados de cliente en el navegador.
(Ref: https://code.google.com/p/android/issues/detail?id=8196 )
No se hace mención de WebViews 🙁
Aunque hay alguna nueva API para cargar certificados en un llavero:
http://developer.android.com/reference/android/security/KeyChain.html http://nelenkov.blogspot.it/2011/11/using-ics-keychain-api.html
No está claro si el WebView va a usarlos … Así que supongo que deberías probar la clase KeyChain y ver si puedes autenticar correctamente (no tengo una manera sencilla de probar esto, así que estás solo).
Si KeyChain no funciona con WebViews , supongo que todo se reduce a un par de lejos de soluciones perfectas:
Solución 1:
Utilizar ClientCertRequestHandler de todos modos (Está marcado como oculto, pero aparentemente todavía utilizable):
https://code.google.com/p/android/issues/detail?id=53491
Sin embargo incluso suponiendo que lo haga, el Android Dev. El equipo puede modificar o eliminar el método sin previo aviso y es posible que su aplicación deje de funcionar en versiones futuras del SO.
Solución 2:
Si puedes limitar tu objetivo a Android 4.0 o más reciente, una solución en negrita (y poco probable …) es intentar cargar el certificado en la vista web desde tu almacenamiento local mediante un esquema de archivos:
Cargar archivo HTML local en WebView
Pero dudo mucho que la webview se comportará como el navegador hace …
Solución 3: (que debería funcionar pero requiere mucho esfuerzo)
Maneje cada conexión https en segundo plano utilizando HTTPClient o HttpURLConnection y luego pase los datos al WebView:
http://chariotsolutions.com/blog/post/https-with-client-certificates-on/
Tienes mi simpatía.
Si solo necesitas ignorar las solicitudes de certificados SSL en la vista web, esto funcionó para mí en Lollipop:
Dentro de su cliente de vista web, sobrescriba:
@Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); // Ignore SSL certificate errors }
Esto es útil para depurar visiones web en entornos qa / dev / stage.
En API 21 (Android Lollipop) y superior, puede sobrescribir WebViewClient.onReceivedClientCertRequest (vista WebView, solicitud ClientCertRequest) . En el método, utilice el administrador de claves para obtener la clave privada y la cadena de certificados y llame a request.proceed () .
El WebView basado en Chronium en Android 4.4 introdujo un error: Cuando el servidor solicita un certificado de cliente, el WebView detiene el proceso de carga. El método onPageFinished se llamará inmediatamente, pero no se mostrará ninguna página.
Para manejar correctamente la validación del certificado SSL para evitar que la aplicación se rechace desde la reproducción de Google de acuerdo con la Política de seguridad actualizada, cambie el código para invocar SslErrorHandler.proceed () siempre que el certificado presentado por el servidor cumpla con sus expectativas e invoque SslErrorHandler.cancel ().
Por ejemplo, agrego un cuadro de diálogo de alerta para que el usuario haya confirmado y parece que Google ya no muestra advertencia.
@Override public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) { final AlertDialog.Builder builder = new AlertDialog.Builder(this); String message = "SSL Certificate error."; switch (error.getPrimaryError()) { case SslError.SSL_UNTRUSTED: message = "The certificate authority is not trusted."; break; case SslError.SSL_EXPIRED: message = "The certificate has expired."; break; case SslError.SSL_IDMISMATCH: message = "The certificate Hostname mismatch."; break; case SslError.SSL_NOTYETVALID: message = "The certificate is not yet valid."; break; } message += " Do you want to continue anyway?"; builder.setTitle("SSL Certificate Error"); builder.setMessage(message); builder.setPositiveButton("continue", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { handler.proceed(); } }); builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { handler.cancel(); } }); final AlertDialog dialog = builder.create(); dialog.show(); }
Después de que esto cambie no mostrará advertencia.
No podemos acceder al certificado de cliente en webview, hay un problema de google planteado para el mismo. https://code.google.com/p/android/issues/detail?id=53491
- Android – ActionBar SearchVista sugerencias con un array String simple
- Agregue sólo el borde superior e inferior en LinearLayout