Sur la base du fil de dépannage des commentaires pour l'OP, la réponse consiste à installer uniquement le certificat CA du proxy en tant que certificat de confiance, pas son certificat + clé privée.
Le problème a été causé par deux facteurs :
-
L'installation non seulement du certificat CA du proxy MiTM, mais également de sa clé privée (permettant ainsi aux applications VPN sur l'appareil de décrypter/intercepter le trafic réseau provenant d'autres applications). Vous n'avez pas besoin de la clé privée du proxy MiTM sur l'appareil.
-
Le changement de comportement dans Android Nougat du flux Paramètres -> Sécurité -> Installer depuis le stockage
pour les fichiers contenant une clé privée en plus des certificats. Ce changement de comportement a révélé le problème ci-dessus.
Avant Nougat, le flux Paramètres -> Sécurité -> Installer depuis le stockage
pour les fichiers contenant une clé privée en plus des certificats installait de manière erronée les certificats en tant que certificats de confiance pour l'authentification du serveur (par exemple, HTTPS, TLS, permettant ainsi la réussite de votre MiTM), en plus d'être correctement installés en tant que certificats clients utilisés pour authentifier cet appareil Android auprès des serveurs. Dans Nougat, le bogue a été corrigé et ces certificats ne sont plus installés en tant que certificats de confiance pour l'authentification du serveur. Cela empêche les informations d'authentification client d'affecter (affaiblir) la sécurité des connexions aux serveurs. Dans votre scénario, cela empêche votre MiTM de réussir.
Ce qui complique les choses, c'est que le flux Paramètres -> Sécurité -> Installer depuis le stockage
ne fournit pas de moyen explicite à l'utilisateur de spécifier s'il installe une information d'authentification client (clé privée + chaîne de certificats) ou une ancre de confiance pour l'authentification du serveur (uniquement un certificat CA -- aucune clé privée nécessaire). En conséquence, le flux Paramètres -> Sécurité -> Installer depuis le stockage
devine s'il s'agit d'une information d'authentification client/utilisateur ou d'une ancre de confiance pour l'authentification du serveur en supposant que, si une clé privée est spécifiée, il doit s'agir d'une information d'authentification client/utilisateur. Dans votre cas, il a incorrectement supposé que vous installiez une information d'authentification client/utilisateur plutôt qu'une ancre de confiance pour l'authentification du serveur.
P. S. En ce qui concerne votre Configuration de sécurité réseau, vous devriez probablement configurer l'application pour également faire confiance aux ancres de confiance "système" en mode debug (section de remplacement en mode debug). Sinon, les builds de debug de l'application ne fonctionneront pas sauf si les connexions sont interceptées par un proxy dont le certificat CA est installé en tant que certificat de confiance sur l'appareil Android.
1 votes
En tant que test rapide, essayez d'ajouter/déplacer l'utilisateur dans la pour voir si cela change quelque chose. Normalement, cela ne devrait pas, mais cela ne prendra qu'un instant à essayer.
0 votes
Ne devriez-vous pas ajouter le CA explicite pour Charles dans developer.android.com/training/articles/security-config.html : 'Faire confiance à des CA supplémentaires', car le CA de Charles est auto-généré et ne serait pas dans la chaîne de confiance du système Android ?
0 votes
@Morisson Chang : Je ne veux pas intégrer le Charles CA dans l'application, je veux être en mesure de l'ajouter manuellement sur mon téléphone de développement comme je le faisais avant. De
Paramètres -> Sécurité -> Installer à partir du stockage
0 votes
1. Comment référencez-vous le fichier network_security_config.xml dans le AndroidManifest.xml de votre application ? 2. Pourriez-vous s'il vous plaît fournir le lien vers le fichier .pfx ? Je présume qu'il contient uniquement le certificat CA (pas de clés privées) et donc devrait être sûr à publier. Je demande car, si le fichier .pfx contient une clé privée, il sera considéré comme un fichier de certificat client et donc le CA du fichier ne sera pas installé en tant que certifié pour l'authentification du serveur.
0 votes
@Alex Klyubin : Mon fichier .pfx original contenait en effet une clé privée. Je viens de passer à un fichier .crt contenant juste un certificat. Jusqu'à présent, pas de chance. Je vais redoubler d'efforts, redémarrer tout et vous tenir informé.
1 votes
@AlexKlyubin hurra, ça fonctionne maintenant :). Je suppose que j'ai dû redémarrer mon charles ou mon application ou quoi que ce soit d'autre. J'étais confus car j'ai installé le même fichier .pfx sur d'innombrables appareils Android avant Nougat et ils étaient reconnus correctement. Mais tout va bien maintenant. Pourriez-vous écrire une réponse pour que je puisse l'approuver ?