Pregunta

Estoy construyendo una versión de prueba de una aplicación para un cliente. Parte de esta aplicación utiliza una vista Web que llama a un sitio basado en SSL. A su vez, el cliente ha proporcionado un dominio de prueba, donde el nombre del certificado no coincide con el nombre de dominio completo. Por desgracia, no están en condiciones de suministrar un certificado que los fósforos. : (

Estoy trabajando en torno a este tema en el compañero iOS ad hoc de aplicación con una línea de código (de nuevo, no para su uso en producción - sólo para propósitos de prueba). He buscado información similar sobre el sistema operativo Android, pero las soluciones que he visto aquí y en otros lugares son suficientes para hacer girar mi cabeza a lo grande en comparación!

¿Hay una forma sencilla de evitar esto? Incluso un entorno de cara al usuario escondido en alguna parte?

Las pistas apreciada!

¿Fue útil?

Solución

Crear un WebViewClient y manejar la onReceivedSslError con la apariencia siguiente:

public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error)

Dentro de esta devolución de llamada se puede simplemente llamar handler.proceed() y la página continuará carga. Si no se controla esta devolución de llamada y llamar al método proceed() entonces el comportamiento por defecto será para la página no carga.

Otros consejos

Respuesta de Actualización de acuerdo actualización de la nueva política de seguridad de Google por error SSL Handler, por favor ver este Desarrolladores de Android Centro de asistencia .

Para evitar el rechazo de la aplicación en Google Play debido a que viola nuestra política de comportamiento malicioso.

Para manejar adecuadamente la validación de certificados SSL, cambiar su código para invocar SslErrorHandler.proceed () cada vez que el certificado presentado por el servidor cumple con sus expectativas, e invocar SslErrorHandler.cancel () en caso contrario.

Por ejemplo, agrego un diálogo de alerta al usuario marca han confirmado y parece más largos Google muestra ninguna 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();

}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top