Android WebView setCertificate emite problemas de SSL

He visto un montón de mensajes e información sobre errores de SSL y me he topado con uno de ellos.

Estoy tratando de acceder a una página web a través de Android WebView con un certificado GlobalSign CA BE, y recibo un error no confiable.

Para la mayoría de los teléfonos, funciona bien para manejar esto, y simplemente decirle al manejador que proceda.

Algunos teléfonos, sin embargo, terminan recibiendo un onReceivedError en el cliente webview, diciéndole que no puede establecer contacto con el servidor. Esto sucede después de que ha pasado por el onReceivedSslError y procedió.

Busqué descripciones y encontré muchas descripciones que implicaban a HttpClient ya sea instalando tu propio certificado o simplemente engañándolo a aceptarlo todo.

Sin embargo, puesto que utilizaba WebView pensé en hacer uso de WebView.setCertificate (SslCertificate crt). Busqué discusiones de esta función, pero no encontré mucha / ninguna información.

Conseguí un asimiento del certificado que se dijo para ser untrusted, e hice este código:

try{ Certificate myCert = CertificateFactory.getInstance("X509"). generateCertificate(this.getResources(). openRawResource(R.raw.globalsign_ca_be)); X509Certificate x509 = (X509Certificate) myCert; SslCertificate sslCert = new SslCertificate(x509); webView.setCertificate(sslCert); } catch (CertificateException ex){ ex.printStackTrace(); } 

Con un archivo .cer que contiene lo siguiente:

—– BEGIN CERTIFICATE —– MIIEbjCCA1agAwIBAgILBAAAAAABElatYgQwDQYJKoZIhvcNAQEFBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0wNzA1MDQxMDAw MDBaFw0xNDAxMjcxMTAwMDBaMHExCzAJBgNVBAYTAkJFMR0wGwYDVQQLExREb21h aW4gVmFsaWRhdGlvbiBDQTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEoMCYG A1UEAxMfR2xvYmFsU2lnbiBEb21haW4gVmFsaWRhdGlvbiBDQTCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBALSfSeaznwFVNtA2lWzLFlpscrXineL6OekK 3HNcoDt2bQUokw2lQvPoy + 7TMxoTJwrfXNFUYmqaFzbWPFiHHrJmH1VpK4lWR7TC UAzlXcH9KRtmc0P0b9EUTyptSFI69eSQP96y9BDV + fqslg0QMiPS01GnlYVQ + g8p naeITg0xm0RBjkEvbpoatLalWfFJWQl + fknTaTNLAJLFG0Igafhk39inRNGQXv05 rWt9 / tWLpAFk9qe0IITMBS8n7h7VJJauhEOkPkPzO5nX + fLePRnt0GXxScpI0jh9 xkjXcmG4xsJnCthlWv1b88X9voxpz5kgtursOYDpZqjuPZ1Ge4cCAwEAAaOCAR8w ggEbMA4GA1UdDwEB / wQEAwIBBjASBgNVHRMBAf8ECDAGAQH / AgEAMEsGA1UdIARE MEIwQAYJKwYBBAGgMgEKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuZ2xvYmFs c2lnbi5uZXQvcmVwb3NpdG9yeS8wHQYDVR0OBBYEFDYSTp5xxCZB8frxKUy / F6 RT KLbrMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQv cm9vdC5jcmwwEQYJYIZIAYb4QgEBBAQDAgIEMCAGA1UdJQQZMBcGCisGAQQBgjcK AwMGCWCGSAGG + EIEATAfBgNVHSMEGDAWgBRge2YaRQ2XyolQL30EzTSo // z9SzAN BgkqhkiG9w0BAQUFAAOCAQEAwyV5SvrNJm9AariUG + ag4WvSMZo / ifvFCiJ1ev27 QDScvJ6FSVl6lcwNLUQLx8sVEB7S3ON46l / 1NVGmyD85kBWeXxXJt49da2OZaOFu XPydNzMKrodwSqLjqyZ9cwfk9wqqdY + m7psE0QVDdBq61MKdf7egbO0WmmdAVquD n0yc6yg0H43mWg9pQNmpnmr5iX / Q + IyzSC4LT / H5z / UOEQIMiRZzU10s0 + / + eXwsl utVOj4WQP4iTeaUgrP wisvLpVV4gzlBMqpdJZOn6u4YcrXiHX8IdBG2ASdOls + o 8Cr5UqwkGhmen2xSfIs6plTewcchfTrTvBqobfK / 33bKAw == —– END CERTIFICATE– —

Se completó sin excepción, pero todavía tengo el mismo comportamiento de mi webview. Primero un error SSL y luego un error diciendo que no podría comunicar / cargar la página.

Si alguien tiene alguna información, ha sido capaz de obtener SSL funcionando correctamente en WebView, o incluso sólo ayuda en formas de depurar esto. Me sería de gran aprecio.

Mi cabeza también está explotando un poco, porque no soy muy experimentado en SSL para empezar.

* Es una clave pública btw, nada emocionante;) (GlobalSign CA BE)

Más información: la excepción ssl: error primario: 3 certificado: Emitido a: CN = GlobalSign Validación de Dominio CA, O = GlobalSign nv-sa, OU = Validación de Dominio CA, C = BE;

Emitido por: CN = GlobalSign Root CA, OU = CA raíz, O = GlobalSign nv-sa, C = BE;

El error 3 es SSL_UNTRUSTED

Sin embargo, tengo la sensación de que la función setCertificate, no es añadir un certificado de confianza para una raíz faltante o similar, sino en lugar de agregar un certificado de cliente para identificar con un servidor esperaba uno. Sería bueno con algunos más información sobre esta función sin embargo, parece un poco indocumentada.

Conseguí el CA con el funcionamiento confied.payex.com:443 a través de un sitio llamado ssltest.net y descargando el cert de allí.

3 Solutions collect form web for “Android WebView setCertificate emite problemas de SSL”

He intentado decodificar el certificado pero no parece ser válido (en realidad he probado dos implementaciones X509 distintas y ambas me dieron un error de "codificación incorrecta").

¿Puede dar más detalles sobre la excepción de SSL?

No encontré mucha información sobre el método setCertificate . Creo que este método espera el certificado del servidor. Debe asegurarse de que el certificado que decodifica es el certificado de entidad final y no un certificado de entidad emisora ​​de certificados.

Si está utilizando InMobi sdk, solo actualícelo a la última versión y esta advertencia será corregida. Más información aquí en la respuesta de Sohan

Información

Si tiene un WebClient que reemplaza la función onReceivedSSLError () y llama a la API handler.proceed (), puede resolver el problema de certificado del error 3, probé en Android 4.4 y 6.0.

Si todavía obtienes un errorCode (-1) en la función onReceivedError (), debes comprobar la implementación del lado del servidor en algún momento, especialmente cuando llamas al método POST en lugar del método GET, porque el servidor puede devolver nada si no es inesperado POST parámetros.

Buena suerte.

  • Android WebViewClient onReceivedError no se llama para un error 404
  • Android cómo mostrar PopupMenu en webview como GMail
  • Cómo controlar el uso de memoria cuando se llama a varios WebView en Android?
  • Desactivar el enlace automático de Webview
  • Uso de shadow-dom (Polymer) en Android 4.4 Webview
  • Android WebView HTML5 Video Spawns MediaPlayer que vive para siempre en Samsung S4
  • Abrir un menú de carga de archivos en una vista web no funciona
  • Cómo cambiar la cara de la fuente de Webview en Android?
  • Android: WebView shouldInterceptRequest no agregar RequestProperties en el WebView
  • Cómo utilizar una fuente personalizada con WebView
  • Pantalla en blanco de Android en onBack en un archivo loadDataWithBaseURL
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.