3 votes

Comment expliquer la divergence de validation des certificats SSL entre Chrome et WebView sur un Android moderne ?

(titre original : Certains fournisseurs d'Android livrent-ils leur propre implémentation de la pile SSL ?)

Nous avons eu (en production) un problème particulier lié à HTTPS dernièrement dans notre application Android.

Tous les appels vers notre domaine à partir d'une WebView échouent dans notre application Android, en raison d'un problème de validation du certificat SSL. Mais cela ne se produit que dans une combinaison très spécifique de circonstances :

  • seulement sur Androids (les navigateurs de bureau, iOS sont bien avec notre cert)
  • uniquement à l'intérieur d'un WebView (cela fonctionne bien dans Chrome, le navigateur Android par défaut, et lors de l'utilisation de la fonction HttpsURLConnection à partir du code Java)
  • seulement sur certains appareils (Samsung Galaxy Edge S6 avec Android 6, HTC One M8 avec Android 5) ; d'autres appareils (Sony/Android 4.4, Lenovo/Android 4.4, Motorola/Android 5, Huawei/Android 6, Nexus/Android 6) ne sont pas concernés

Autres informations importantes :

  • Notez que le problème se produit sur Android 5/6 qui ont une WebView à mise à jour automatique. Par exemple, j'ai reproduit le problème sur un Samsung Galaxy Edge S6 (sans marque ISP) entièrement à jour, Android 6.0.1 avec les correctifs de sécurité du 1er octobre 2016. La vue web est très moderne (Chrome 53)

  • notez que J'ai vérifié le magasin de l'AC et le certificat racine qui a signé notre certificat se trouve dans le magasin des appareils concernés, avec le même nom et la même empreinte sha1.

  • J'avais l'habitude d'avoir des certificats CA personnalisés (utilisateur) (générés par Fiddler et installés manuellement par moi pour pouvoir décrypter HTTPS pour le débogage) sur mes appareils, mais pour les besoins du test, je les ai supprimés, et maintenant le magasin CA utilisateur est vide sur tous les appareils, mais le problème persiste.

  • J'ai testé une soixantaine de sites Web de premier plan, et le problème est reproductible pour les sites suivants plusieurs d'eux aussi (y compris https://www.amazon.com ) sur les deux appareils concernés (l'ensemble des sites web rejetés par Samsung et HTC se chevauchent, mais ne sont pas exactement les mêmes). Certains de ces sites Web affectés ont le même certificat VeriSign que le nôtre comme certificat racine de la chaîne, mais ce certificat racine est présent dans le magasin de l'AC. de l'appareil comme mentionné précédemment.

  • Notre certificat SSL est assez bon selon SSLLabs, et le problème se produit sur amazon.com qui a apparemment une très bonne configuration serveur/cert ( cliquez sur )

  • Bien que nous ayons reproduit le problème dans notre laboratoire, nous avons également reçu un certain nombre de commentaires négatifs sur le Play Store qui ressemblent au même problème (tous provenant de Samsungs, mais cela correspond à notre base d'utilisateurs). Cependant, l'application fonctionne bien pour la plupart des gens, comme en témoignent les commentaires 5 étoiles que nous recevons chaque jour.

Les prochaines étapes que nous entreprenons :

  • Nous essayons d'intégrer le certificat à l'intérieur de l'application Android et de faire en sorte qu'Android lui fasse explicitement confiance. WebView y HTTPSUrlConnection se comportent différemment, nous ne sommes pas sûrs que cela fonctionnera.

  • Si cela ne fonctionne pas, en dernier recours, nous essaierons probablement d'outrepasser l'option WebViewClient.onReceivedSslError avec une mise en œuvre personnalisée qui inspecter le certificat et lui faire confiance s'il a la même empreinte digitale que notre certificat.

  • de meilleures options ?

Théories :

  • certaines compagnies Android ont personnalisé la pile SSL dans leurs versions d'Android (mais pourquoi Samsung et HTC ont-ils un comportement très similaire) ?
  • Chrome a-t-il une boutique CA distincte de celle de l'appareil Android ?
  • d'autres applications installées sur les appareils Android concernés qui perturbent le WebView de mon application ?
  • Autre chose ?

Edit :

J'ai reproduit le problème sur les sites web suivants :

  • www.microsoft.com (certificat Symantec)
  • www.amazon.com (certificat Symantec)
  • mail.ru (certificat GeoTrust - filiale de Symantec)
  • deux autres avec des certs Symantec ou GeoTrust
  • www.theguardian.com (le certificat ne semble pas être lié à Symantec)

Il est donc fort probable que le problème vienne du bug de webview que EricLaw a signalé. Cependant, le cas Guardian semble être un autre problème.

Edit 2 :

J'ai confirmé que le problème était dû au bogue mentionné par Eric. Nous avons changé de fournisseur de certificat SSL et le problème a été résolu.

3voto

vitriolix Points 182

0voto

Dans le cas du trafic généré par l'application Facebook, vous trouverez une implémentation personnalisée, appelée Zero, et

"ils veulent vraiment 0-RTT, mais tls 1.3 n'est pas là, alors ils ont modifié le cryptage QUIC pour que cela se produise au dessus de TCP : ça s'appelle Zero."

Fuente aquí

Ce trafic peut être capturé avec n'importe quel appareil iOS ou Android à jour utilisant l'application Facebook. Un pcap est disponible aquí

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X