Basé sur le fil de dépannage des commentaires pour l'OP, la réponse est d'installer uniquement le certificat CA du proxy en tant que certifié, pas son certificat + clé privée.
Le problème a été causé par deux facteurs :
-
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 des autres applications). Vous n'avez pas besoin de la clé privée du proxy MiTM sur l'appareil.
-
Modification du comportement d'Android Nougat dans le flux de Paramètres -> Sécurité -> Installer à partir du stockage
pour les fichiers contenant une clé privée en plus des certificats. Ce changement de comportement a mis en lumière le problème ci-dessus.
Avant Nougat, le flux de Paramètres -> Sécurité -> Installer à partir du stockage
pour les fichiers contenant une clé privée en plus des certificats installait par erreur les certificats comme étant de confiance pour l'authentification du serveur (par exemple, HTTPS, TLS, facilitant 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 comme étant 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 la réussite de votre MiTM.
Ce qui complique les choses, c'est que le flux de Paramètres -> Sécurité -> Installer à partir du stockage
ne fournit pas de moyen explicite à l'utilisateur pour 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 (juste un certificat CA -- pas de clé privée nécessaire). En conséquence, le flux de Paramètres -> Sécurité -> Installer à partir du 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 debug-overrides). Sinon, les versions debug de l'application ne fonctionneront pas à moins que les connexions ne soient interceptées par un proxy dont le certificat CA est installé en tant que de confiance sur l'appareil Android.
1 votes
En tant que test rapide, essayez d'ajouter/de déplacer l'élément
user
dans le et voyez si cela change quelque chose. Cela ne devrait pas, mais cela ne prendra qu'un instant à essayer.0 votes
N'auriez-vous pas besoin d'ajouter le CA explicite pour Charles dans developer.android.com/training/articles/security-config.html : 'Faire confiance à des AC 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 CA Charles dans l'application, je veux pouvoir l'ajouter manuellement sur mon téléphone de développement comme je le faisais avant. Depuis
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 mettre un lien vers le fichier .pfx ? Je présume qu'il ne contient que le certificat CA (pas de clés privées) et donc ne devrait pas poser de problème pour le publier. Je demande car, si le .pfx contient une clé privée, il sera supposé être un fichier de certificat client et donc le CA du fichier ne sera pas installé en tant que certificat de confiance pour l'authentification du serveur.
0 votes
@Alex Klyubin: Mon fichier .pfx original contenait en effet une clé privée. Je suis passé à un fichier .crt avec juste un certificat à l'intérieur. Pas de chance pour l'instant. Je vais essayer plus fort, redémarrer toutes les choses 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 est bon maintenant. Pourriez-vous écrire une réponse pour que je puisse l'approuver ?