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:

@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.

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); } }; 
  • Personalizar elementos de diálogo desplegables en WebView
  • WebView textarea no aparece el teclado
  • ¿Cómo puedo descargar el archivo mediante webview? (Este caso es raro)
  • El teclado Android no se muestra al hacer clic en la entrada en la vista web
  • Webview no cambia el tamaño cuando aparece el teclado
  • sipml5 está funcionando bien para el cromo y el cromo de escritorio y Android, pero es de dos vías de audio no está funcionando en crosswalk y webview nativo
  • Cómo grabar la pantalla de actividad de la webview con Android MediaCodec?
  • ¿Agente de usuario móvil de Android?
  • No se muestra la versión de WebView UTF-8 de Android
  • ¿Puedo usar componentes de polímero / web en una aplicación androide nativa sin Cordova?
  • Abrir url en la vista web - phonegap
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.