Soporte para WebView de Android onReceivedClientCertRequest
Estoy desarrollando una aplicación de Android mediante la autenticación de certificados de cliente en WebView. El certificado (cert.pfx) y la contraseña están incrustados en la aplicación.
Cuando se ejecuta la solicitud de autenticación de certificado de cliente con una llamada ajax en WebView, se obtiene la siguiente función:
- ¿Cómo acceder a los activos locales desde una URL remota en Android WebView?
- WebView no se muestra correctamente
- Cómo forzar el teclado con números en el sitio web para móviles en Android
- Llamar a métodos Android desde JavaScript
- Android WebView no cargar contenido mixto
@Override public void onReceivedClientCertRequest(WebView view, final ClientCertRequest request) {}
Como yo understend tengo que llamar a:
request.proceed(PrivateKey privateKey, X509Certificate[] chain)
Cualquier idea de cómo crear los objetos PrivateKey y X509Certificate del certificado incrustado para poder continuar con la solicitud. BTW, ¿es esta la forma correcta de implementar la autenticación de certificado de cliente en la aplicación para Android? Si no, por favor consejo.
- Webview no desplazamiento después de agregar setOnTouchListener
- Método restorePicture de WebView - Impedir que la vista web vuelva a cargar la página
- Cómo buscar Android ViewFlipper Ejemplo con varias WebViews
- Android webview + javascript no mostrar la salida en android 4.0.x, 3.x
- Cómo cargar o recuperar una página web en modo en línea y fuera de línea en la aplicación android?
- React-nativo de Android WebView manejar clic en Url antes de cargar
- La navegación privada está obsoleta en Android WebView desde la API 17. ¿Cuál es la alternativa?
- Recrear Buscar en la función de navegador de la página en una vista web
Solucionado con KeyStore para obtener los objetos PrivateKey y X509Certificate:
private X509Certificate[] mCertificates; private PrivateKey mPrivateKey; private void loadCertificateAndPrivateKey() { try { InputStream certificateFileStream = getClass().getResourceAsStream("/assets/cert.pfx"); KeyStore keyStore = KeyStore.getInstance("PKCS12"); String password = "password"; keyStore.load(certificateFileStream, password != null ? password.toCharArray() : null); Enumeration<String> aliases = keyStore.aliases(); String alias = aliases.nextElement(); Key key = keyStore.getKey(alias, password.toCharArray()); if (key instanceof PrivateKey) { mPrivateKey = (PrivateKey)key; Certificate cert = keyStore.getCertificate(alias); mCertificates = new X509Certificate[1]; mCertificates[0] = (X509Certificate)cert; } certificateFileStream.close(); } catch (Exception e) { Log.e(TAG, e.getMessage()); } } private WebViewClient mWebViewClient = new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return false; } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } @Override public void onReceivedClientCertRequest(WebView view, final ClientCertRequest request) { if (mCertificates == null || mPrivateKey == null) { loadCertificateAndPrivateKey(); } request.proceed(mPrivateKey, mCertificates); } };
- Expectativa de puntero nulo al comprobar si SharedPrefs es igual a Null
- Kotlin setter infinte recursion