3 votos

¿Cómo se explica la discrepancia de validación de certificados SSL entre Chrome y WebView en un Android moderno?

(título original: ¿Instalan algunos proveedores de Android su propia implementación de la pila SSL?)

Hemos tenido (en producción) un peculiar problema relacionado con HTTPS últimamente en nuestra aplicación para Android.

Todas las llamadas a nuestro dominio desde una WebView fallan en nuestra aplicación Android, debido a un problema de validación del certificado SSL. Pero esto sólo ocurre en una combinación muy específica de circunstancias :

  • sólo en Androids (los navegadores de escritorio, iOS están bien con nuestro certificado)
  • sólo dentro de un WebView (funciona bien en Chrome, navegador por defecto de Android, y al hacer HttpsURLConnection del código Java)
  • sólo en algunos dispositivos (Samsung Galaxy Edge S6 con Android 6, HTC One M8 con Android 5); otros dispositivos (Sony/Android 4.4, Lenovo/Android 4.4, Motorola/Android 5, Huawei/Android 6, Nexus/Android 6) no están afectados

Otros datos importantes:

  • Tenga en cuenta que el problema se produce en Android 5/6 que tienen una auto-actualización WebView. Por ejemplo, he reproducido el problema en un Samsung Galaxy Edge S6 totalmente actualizado (sin marca ISP), Android 6.0.1 con parches de seguridad desde el 1 de octubre de 2016. La vista web es muy moderna (Chrome 53)

  • nota que He comprobado el almacén de la CA y el certificado root que firmó nuestro certificado está en el almacén de los dispositivos afectados, con el mismo nombre y huella sha1.

  • Solía tener certificados CA personalizados (de usuario) (generados por Fiddler e instalados manualmente por mí para poder descifrar HTTPS para la depuración) en mis dispositivos, pero para hacer la prueba, los eliminé, y ahora el almacén CA de usuario está vacío en todos los dispositivos, pero el problema persiste

  • He probado unos 60 sitios web de alto nivel, y el problema es reproducible para varios de ellos también (incluyendo https://www.amazon.com ) en los dos dispositivos afectados (el conjunto de sitios web rechazados por Samsung y HTC se superpone, pero no es exactamente el mismo). Algunos de esos sitios web afectados tienen el mismo certificado VeriSign como certificado root de la cadena que nosotros, pero este certificado root está presente en el almacén de la CA del dispositivo como se ha mencionado anteriormente.

  • Nuestro certificado SSL es bastante bueno según SSLLabs, y el problema ocurre en amazon.com que aparentemente tiene una muy buena configuración de servidor/certificado ( haga clic en )

  • Si bien reprodujimos el problema en nuestro laboratorio de dispositivos, también obtuvimos bastantes reseñas negativas en la Play Store que parecen tener el mismo problema (todas de Samsung, pero esto se correlaciona con nuestra base de usuarios). Sin embargo, la aplicación funciona bien para la mayoría de la gente, ya que recibimos la mayoría de los comentarios de 5 estrellas todos los días.

Los próximos pasos que vamos a dar:

  • Estamos tratando de incrustar el cert dentro de la aplicación Android y hacer que Android confíe explícitamente en él, pero como WebView y HTTPSUrlConnection se comportan de manera diferente, no estamos seguros de que esto funcione

  • Si esto no funciona, como último recurso probablemente también intentaremos anular WebViewClient.onReceivedSslError con una implementación personalizada que inspeccionar el certificado y confiar en él si tiene la misma huella digital que nuestro cert

  • ¿alguna opción mejor?

Teorías:

  • ¿algunos de los Android que envían la pila SSL personalizada en sus versiones de Android? (pero por qué Samsung y HTC mostraría un comportamiento muy similar)
  • ¿tiene Chrome una tienda de CA distinta a la del dispositivo Android?
  • ¿algunas otras aplicaciones instaladas en los dispositivos Android afectados que se confunden con la WebView de mi aplicación?
  • ¿algo más?

Editar:

He reproducido el problema en los siguientes sitios web:

  • www.microsoft.com (certificado de Symantec)
  • www.amazon.com (certificado de Symantec)
  • mail.ru (certificado GeoTrust - filial de Symantec)
  • otros dos con certificados de Symantec o GeoTrust
  • www.theguardian.com (el certificado no parece estar relacionado con Symantec)

Así que lo más probable es que el problema provenga del error de la vista web que señaló EricLaw. Sin embargo, el caso de Guardian parece ser otro problema.

Editar 2:

He confirmado que el problema se debe al error mencionado por Eric. Hemos cambiado nuestro proveedor de certificados SSL y se ha solucionado el problema.

1 votos

Mientras que su descripción del problema carece de mucho detalle uno podría explicar el detalle dado solamente con diferentes CA en el almacén de confianza. Esto significa que todavía podrían utilizar la misma pila SSL pero sólo difieren en el contenido del almacén de confianza.

0 votos

He comprobado el almacén de la CA y el Root cert que utilizamos está en el almacén de los dispositivos afectados, con el mismo nombre y huella sha1.

2 votos

Quizás podrías añadir también detalles sobre la teoría que tienes sobre el rechazo para poder determinar si se trata de un problema de la pila SSL o de otra cosa (es decir, un problema de Webview y no de la pila SSL ya que Chrome funciona bien).

3voto

vitriolix Puntos 182

0 votos

Sí, la actualización de WebView me ayuda.

0voto

En el caso del tráfico generado por la aplicación de Facebook, encontrarás una implementación personalizada, llamada Zero, y

"realmente quieren 0-RTT, pero tls 1.3 no está aquí, así que modificaron QUIC crypto para hacerlo posible sobre TCP: se llama Zero".

Fuente aquí

Este tráfico se puede capturar con cualquier dispositivo iOS o Android actualizado que ejecute la aplicación de Facebook. Hay un pcap disponible aquí

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X