(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
yHTTPSUrlConnection
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).
0 votos
Nuestra teoría era que el problema podía deberse a que el servidor enviaba innecesariamente el certificado root y la implementación estaba demasiado ansiosa por rechazarlo por alguna razón. Sin embargo, he comprobado la mayoría de los 100 mejores sitios web del mundo, y de hecho
https://www.amazon.com
yhttps://mail.ru
(sólo esos dos) exhiben el mismo comportamiento, mientras que tienen impecable certificaciones y no enviando el Root cert desde el servidor, por lo que creo que mi teoría se vino abajo...0 votos
Las implementaciones de webview no se actualizan con la misma frecuencia que los navegadores, en algunos casos nunca o sólo con grandes actualizaciones OTA. también están siempre muy por detrás de los "verdaderos navegadores" en términos de características y seguridad. al parecer, no hay mucho que los desarrolladores puedan hacer al respecto aparte de tirar más barro a la pared y ver qué se pega, bifurcando por dispositivo según sea necesario.
0 votos
En su caso, yo asumiría que todo el proceso está bien, pero es la preocupación por el rechazo de algunos dispositivos Android. Me gustaría aconsejar que su certificado se basa en el cifrado SHA1, y es viejo algoritmo de hash. Usted debe tratar de volver a emitir su certificado SSL con el algoritmo de hash SHA-2 y tratar de usarlo. Espero que su problema se resuelva.
0 votos
Nuestro certamen se reporta como
SHA256withRSA
por SSLLabs. El problema también se da en el caso deamazon.com
que tiene una muy buena configuración del servidor: ssllabs.com/ssltest/analyze.html?d=www.amazon.com ; he puesto algunas actualizaciones más en la propia pregunta0 votos
¿Hay alguna posibilidad de que tengas una aplicación MitM, por ejemplo un bloqueador de anuncios, instalada en ese teléfono? ¿Puedes reproducirlo con la "configuración de fábrica" del teléfono?
0 votos
@Z.T. es una idea interesante, intentaré comprobar esa vía la semana que viene. Estamos teniendo reportes de usuarios que tienen probablemente el mismo problema (por los síntomas), todos de Samsung, y según nuestros registros estimamos que podría haber 100s/1000s de personas afectadas. Pero la aplicación sigue funcionando para la mayoría de la gente, lo cual es un enigma.