Android 7 a introduit quelques changements dans la façon dont les certificats sont gérés ( http://android-developers.blogspot.com/2016/07/changes-to-trusted-certificate.html ) et je ne peux plus faire fonctionner mon proxy Charles.
Mon network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<debug-overrides>
<trust-anchors>
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Je cours en mode débogage. Mais quoi qu'il arrive, j'obtiens javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
.
Inutile de dire que j'ai installé un pfx
certificat à partir de Settings -> Security -> Install from storage
. Le certificat apparaît dans User Credentials
mais pas dans Trusted credentials -> User
. Sur mon appareil Lollipop, les certificats y sont répertoriés.
J'utilise okhttp3 comme bibliothèque HTTP.
Une idée de ce que je fais mal?
la source
user
ci dans le<base-config>
et voyez si cela change. Cela ne devrait pas, mais cela ne prendra qu'un moment pour essayer.Settings -> Security -> Install from storage
Réponses:
Sur la base du fil de dépannage des commentaires pour l'OP, la réponse est d'installer uniquement le certificat CA du proxy comme étant approuvé, et non son certificat + clé privée.
Le problème était dû à deux facteurs:
Installer non seulement le certificat CA du proxy MiTM, mais également sa clé privée (permettant ainsi aux applications VPN sur l'appareil de décrypter le trafic réseau / MiTM à partir d'autres applications). Vous n'avez pas besoin de la clé privée du proxy MiTM sur l'appareil.
Android Nougat changement de comportement du
Settings -> Security -> Install from storage
flux pour les fichiers qui contiennent une clé privée en plus des cert (s). Ce changement de comportement a démasqué le problème ci-dessus.Avant Nougat, le
Settings -> Security -> Install from storage
flux des fichiers contenant une clé privée en plus des certificats installait à tort les certificats comme étant fiables pour l'authentification du serveur (par exemple, HTTPS, TLS, faisant ainsi réussir votre MiTM), en plus d'être correctement installé en tant que certificats client 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 approuvés pour l'authentification du serveur. Cela empêche les informations d'authentification client d'affecter (d'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
Settings -> Security -> Install from storage
ne fournit pas un moyen explicite à l'utilisateur de spécifier s'il installe un justificatif d'authentification client (clé privée + chaîne de certificats) ou une ancre de confiance d'authentification serveur (juste un certificat CA - aucune clé privée nécessaire) . En conséquence, leSettings -> Security -> Install from storage
flux devine s'il s'agit d'informations d'identification d'authentification client / utilisateur ou d'ancre d'approbation d'authentification serveur en supposant que, si une clé privée est spécifiée, il doit s'agir d'informations d'identification d'authentification client / utilisateur. Dans votre cas, il a supposé à tort que vous installez une information d'identification d'authentification client / utilisateur plutôt qu'une ancre d'approbation d'authentification de serveur.PS En ce qui concerne votre configuration de sécurité réseau, vous devriez probablement configurer l'application pour qu'elle fasse également confiance aux ancres de confiance "système" en mode débogage (section debug-overrides). Sinon, les versions de débogage de l'application ne fonctionneront pas à moins que les connexions ne soient effectuées par un proxy dont le certificat CA est installé comme approuvé sur l'appareil Android.
la source
Trust anchors specified in debug-overrides are added to all other configurations
. J'avais donc l'impression qu'il ajoutait à 'base-config' et ne l'avait pas complètement remplacé?La solution est de ne pas utiliser .p12 , il suffit de naviguer avec Chrome (avec un proxy configuré sur le wifi) vers http://charlesproxy.com/getssl et d' installer le fichier .pem téléchargé .
J'ai eu exactement le même problème sur mon Nexus 5X sous Android 7.0. Il était précédemment exporté .p12 de Charles 3.11.5 (Aide-> Proxication SSL-> Exporter le certificat racine Charles et la clé privée). Lorsque j'ai essayé d'installer .p12 à partir du téléphone (Paramètres-> Sécurité-> Installer à partir du stockage), il n'apparaît que sous "Informations d'identification de l'utilisateur" et jamais sous "Informations d'identification de confiance", et bien sûr SSL avec le proxy Charles ne fonctionnait pas.
Le "mode d'emploi" total pour Android 7.0 serait le suivant:
android:networkSecurityConfig="@xml/network_security_config"
à<application>
au Manifest.xmlPS Vérifiez la date / l'heure sur l'appareil. Cela devrait être correct.
la source
Je suis sous Android 7.1.1, voici comment je configure sur mon appareil (OnePlus One) - sans changement de manifeste (je ciblais l'API 21 pour mon application):
Dans Charles Proxy:
Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser
. Cette étape vous donne l' adresse IP du proxy et le numéro de port, ainsi que le lien vers où vous devez télécharger le proxy SSL de Charles.Sur votre téléphone:
Wifi Settings > Modify Network > Advanced Options
. Définissez Proxy surManual
et entrez l'adresse IP et le numéro de port que vous avez reçus de Charles dansProxy hostname
etProxy port
respectivement.(FACULTATIF) Vous pouvez ou non être en mesure d'accéder au lien chls.pro/ssl fourni par Charles plus tôt. Sur mon appareil, j'étais toujours informé que je n'avais pas de connexion réseau. J'ai ajouté le charlesproxy.com sur le
Bypass proxy for
terrain.Sur votre navigateur, accédez au lien de l'étape 3 et téléchargez le certificat nécessaire (s'il ne fonctionne pas sur Chrome, téléchargez Dolphin Browser) .Vous pouvez nommer votre certificat avec n'importe quel nom.
De retour sur Charles Proxy:
Allow
ou à l'autre deDeny
votre téléphone pour utiliser le proxy si vos paramètres sont définis par défaut pour vous demander des connexions à distance.Vous pouvez maintenant utiliser Charles sur Nougat 7.1.1.
la source