Webview evitar la alerta de seguridad de google jugar con la implementación de onReceivedSslError

Tengo un enlace que se abrirá en webview. El problema es que no puede estar abierto hasta que invalide onReceivedSslError como este:

@Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } 

Estoy recibiendo una alerta de seguridad de google play diciendo:

Alerta de seguridad Su aplicación tiene una implementación insegura del controlador WebViewClient.onReceivedSslError. Específicamente, la implementación ignora todos los errores de validación de certificados SSL, lo que hace que su aplicación sea vulnerable a ataques man-in-the-middle. Un atacante puede cambiar el contenido de WebView afectado, leer datos transmitidos (como credenciales de inicio de sesión) y ejecutar código dentro de la aplicación mediante JavaScript.

Para manejar correctamente la validación de certificados SSL, cambie su código para invocar SslErrorHandler.proceed () siempre que el certificado presentado por el servidor cumpla con sus expectativas e invoque SslErrorHandler.cancel () de lo contrario. Se ha enviado una alerta de correo electrónico con la (s) aplicación (es) y las clases afectadas a la dirección de la cuenta de desarrollador.

Responda a esta vulnerabilidad tan pronto como sea posible e incremente el número de versión del APK actualizado. Para obtener más información sobre el controlador de errores SSL, consulte nuestra documentación en el Centro de asistencia de desarrolladores. Para otras preguntas técnicas, puede publicar en https://www.stackoverflow.com/questions y utilizar las etiquetas "android-security" y "SslErrorHandler". Si está utilizando una biblioteca de terceros que sea responsable de esto, notifique a la Tercero y trabajar con ellos para abordar el tema.

Para confirmar que actualizaste correctamente, sube la versión actualizada a la Consola del programador y vuelve a comprobarlo después de cinco horas. Si la aplicación no se ha actualizado correctamente, se mostrará una advertencia.

Tenga en cuenta que, aunque estos problemas específicos pueden no afectar a todas las aplicaciones que utilizan SSL WebView, lo mejor es mantenerse al día en todos los parches de seguridad. Las aplicaciones con vulnerabilidades que exponen a los usuarios a riesgos de compromiso pueden considerarse productos peligrosos en violación de la Política de contenido y la sección 4.4 del Acuerdo de distribución de desarrolladores.

Asegúrese de que todas las aplicaciones publicadas sean compatibles con el Acuerdo de distribución de desarrolladores y la Política de contenido. Si tienes preguntas o inquietudes, ponte en contacto con nuestro equipo de asistencia a través del Centro de ayuda de desarrolladores de Google Play.

Si onReceivedSslError (handler.proceed()) , la página no se abrirá.

¿Hay de todos modos puedo abrir la página en webview y evitar la alerta de seguridad.

    Para manejar correctamente la validación de certificados SSL, cambie su código para invocar SslErrorHandler.proceed () siempre que el certificado presentado por el servidor cumpla con sus expectativas e invoque SslErrorHandler.cancel () de lo contrario.

    Como dijo el correo electrónico, onReceivedSslError debe manejar el usuario va a una página con cert no válido, como un diálogo de notificación. No debe proceder directamente.

    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); builder.setMessage(R.string.notification_error_ssl_cert_invalid); 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(); } 

    Más explicaciones sobre el correo electrónico.

    Específicamente, la implementación ignora todos los errores de validación de certificados SSL, lo que hace que su aplicación sea vulnerable a ataques man-in-the-middle.

    El correo electrónico indica que el implemento predeterminado ignoró un importante problema de seguridad SSL. Así que tenemos que manejarlo en nuestra propia aplicación que utiliza WebView. Notificar al usuario con un cuadro de diálogo de alerta es una forma sencilla.

    Corrección que funciona para mí es simplemente desactivar la función onReceivedSslError definida en AuthorizationWebViewClient . En este caso se handler.cancel en caso de error SSL. Sin embargo, funciona bien con los certificados SSL de One Drive. Probado en Android 2.3.7, Android 5.1.

    Según Google Alerta de Seguridad: Implementación insegura de la interfaz X509TrustManager , Google Play no admite X509TrustManager partir del 11 de julio de 2016:

    Hola Desarrollador de Google Play,

    Las aplicaciones que se enumeran al final de este correo electrónico utilizan una implementación insegura de la interfaz X509TrustManager. Específicamente, la implementación ignora todos los errores de validación de certificados SSL cuando se establece una conexión HTTPS con un host remoto, lo que hace que su aplicación sea vulnerable a los ataques man-in-the-middle. Un atacante podría leer datos transmitidos (como credenciales de inicio de sesión) e incluso cambiar los datos transmitidos en la conexión HTTPS. Si tienes más de 20 aplicaciones afectadas en tu cuenta, consulta la Consola para desarrolladores para obtener una lista completa.

    Para manejar adecuadamente la validación de certificados SSL, cambie el código en el método checkServerTrusted de su interfaz personalizada X509TrustManager para generar CertificateException o IllegalArgumentException siempre que el certificado presentado por el servidor no cumpla con sus expectativas. Para preguntas técnicas, puede publicar en Desbordamiento de pila y utilizar las etiquetas "android-security" y "TrustManager".

    Responda a este problema tan pronto como sea posible e incremente el número de versión del APK actualizado. A partir del 17 de mayo de 2016, Google Play bloqueará la publicación de las nuevas aplicaciones o actualizaciones que contengan la implementación insegura de la interfaz X509TrustManager.

    Para confirmar que has realizado los cambios correctos, envía la versión actualizada de tu aplicación a la Consola del programador y vuelve a comprobarla después de cinco horas. Si la aplicación no se ha actualizado correctamente, se mostrará una advertencia.

    Aunque es posible que estos problemas específicos no afecten a todas las aplicaciones con la implementación de TrustManager, es mejor no ignorar los errores de validación de certificados SSL. Las aplicaciones con vulnerabilidades que exponen a los usuarios a riesgos de compromiso pueden considerarse productos peligrosos en violación de la Política de contenido y la sección 4.4 del Acuerdo de distribución de desarrolladores.

    Puede utilizar SslError para mostrar, alguna información sobre el error de este certificado, y puede escribir en su diálogo la cadena del error de tipo.

     @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { final SslErrorHandler handlerFinal; handlerFinal = handler; int mensaje ; switch(error.getPrimaryError()) { case SslError.SSL_DATE_INVALID: mensaje = R.string.notification_error_ssl_date_invalid; break; case SslError.SSL_EXPIRED: mensaje = R.string.notification_error_ssl_expired; break; case SslError.SSL_IDMISMATCH: mensaje = R.string.notification_error_ssl_idmismatch; break; case SslError.SSL_INVALID: mensaje = R.string.notification_error_ssl_invalid; break; case SslError.SSL_NOTYETVALID: mensaje = R.string.notification_error_ssl_not_yet_valid; break; case SslError.SSL_UNTRUSTED: mensaje = R.string.notification_error_ssl_untrusted; break; default: mensaje = R.string.notification_error_ssl_cert_invalid; } AppLogger.e("OnReceivedSslError handel.proceed()"); View.OnClickListener acept = new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); handlerFinal.proceed(); } }; View.OnClickListener cancel = new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); handlerFinal.cancel(); } }; View.OnClickListener listeners[] = {cancel, acept}; dialog = UiUtils.showDialog2Buttons(activity, R.string.info, mensaje, R.string.popup_custom_cancelar, R.string.popup_custom_cancelar, listeners); } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.