web-dev-qa-db-fra.com

Problème Proxy SSL/Charles et Android

Je souhaite tester les appels HTTP depuis un appareil Android à l'aide de l'outil de proxy Charles. J'ai besoin de voir le contenu brut de la requête/réponse pour le débogage de l'application. J'ai configuré Charles en ajoutant l'hôte et le port sous "Paramètres du proxy" -> Onglet SSL. Lorsque je lance l'application, tous les appels SSL semblent disparaître rapidement de Charles. Est-ce que quelqu'un a une idée de comment résoudre ce problème? La documentation de Charles ne semble pas avoir d'informations pour les appareils Android.

57
bianca

J'ai compris le problème. C'est parce que Charles 3.7 a quelques bugs pour les appareils Android. J'ai mis à jour la version bêta de Charles 3.8 et semble bien fonctionner pour moi.

1
bianca

pour le Android7

se référer à: Comment obtenir le mandataire charles avec Android 7 nougat?

pour la version Android ci-dessous Android7

Depuis votre ordinateur, lancez Charles:

  1. Ouvrir les paramètres du proxy: Proxy -> Paramètres du proxy, onglet Proxies, cochez la case "Activer le proxy HTTP transparent" et rappelez-vous le "Port" en cœur.  enter image description here

  2. Paramètres de proxy SSL: Proxy -> Paramètres de proxy SSL, onglet Proxy SSL, cochez la case «Activer SSL Proxying» et ajoutez . À Emplacements:  enter image description here  enter image description here

  3. Ouvrez les paramètres de contrôle d'accès: Proxy -> Paramètres de contrôle d'accès. Ajoutez votre sous-réseau local pour autoriser les machines de votre réseau local à utiliser le proxy depuis une autre machine/mobile .  enter image description here

Dans Android Phone:

  1. Configurez votre mobile: Allez dans Paramètres -> Sans fil et réseaux -> WiFi -> Connectez-vous ou modifiez votre réseau, entrez l'adresse IP de l'ordinateur et le port (8888):  enter image description here

  2. Obtenez le certificat SSL Charles. Visitez cette URL à partir de votre navigateur mobile: http://charlesproxy.com/getssl enter image description here

  3. Dans «Nommez le certificat», entrez ce que vous voulez

  4. Acceptez l'avertissement de sécurité et installez le certificat. Si vous l'installez correctement, vous verrez probablement sth comme ceci: Sur votre téléphone, Paramètres -> Sécurité -> Informations d'identification approuvées:  enter image description here

Terminé.

alors vous pouvez avoir un test sur votre mobile, la demande cryptée https sera affichée dans Charles:  enter image description here

64
User9527

Modifier - cette réponse concernait une version antérieure de Charles. Voir la réponse @ semicircle21 ci-dessous pour connaître les étapes appropriées pour v3.10.x - beaucoup plus facile que cette approche aussi ...

Pour ce que cela vaut, voici les instructions étape par étape pour cela. Ils devraient également s'appliquer également sur iOS:

  1. Charles ouvert
  2. Sélectionnez Proxy> Paramètres du proxy> SSL.
  3. Cochez «Activer le proxy SSL»
  4. Sélectionnez «Ajouter un emplacement» et entrez le nom d'hôte et le port (si nécessaire).
  5. Cliquez sur ok et assurez-vous que l'option est cochée.
  6. Téléchargez le cert de Charles à partir d'ici: Charles cert>
  7. Envoyez ce fichier à vous-même dans un email.
  8. Ouvrez l'email sur votre appareil et sélectionnez le certificat
  9. Dans «Nommez le certificat», entrez ce que vous voulez
  10. Cliquez sur OK et vous devriez recevoir un message indiquant que le certificat a été installé.

Vous devriez alors pouvoir voir les fichiers SSL dans Charles. Si vous voulez intercepter et changer les valeurs, vous pouvez utiliser l'outil "Map Local" qui est vraiment génial:

  1. Dans Charles, accédez à Outils> Carte locale 
  2. Sélectionnez "Ajouter entrée"
  3. Entrez les valeurs du fichier que vous souhaitez remplacer
  4. Dans «Chemin local», sélectionnez le fichier que vous souhaitez que l'application charge à la place.
  5. Cliquez sur OK
  6. Assurez-vous que l'entrée est sélectionnée et cliquez sur OK
  7. Lancez votre application
  8. Vous devriez voir dans «Notes» que votre fichier est chargé à la place du fichier live.
43
bkurzius

Merci pour la réponse de @ bkurzius et cette mise à jour est destinée à Charles 3.10+. (La raison est ici )

  1. Charles ouvert
  2. Allez dans Proxy> Paramètres proxy SSL ... 
  3. Cochez «Activer le proxy SSL»
  4. Sélectionnez «Ajouter un emplacement» et entrez le nom d'hôte et le port (si nécessaire).
  5. Cliquez sur ok et assurez-vous que l'option est cochée.
  6. Allez dans Aide> Proxy SSL> Install Charles Root Certificate on a Mobile Device or Remote Browser... et suivez les instructions. (Utilisez le navigateur Android pour télécharger et installer le certificat.)
  7. Dans «Nommez le certificat», entrez ce que vous voulez
  8. Cliquez sur OK et vous devriez recevoir un message indiquant que le certificat a été installé.
27
semicircle21
7
otso

Les réponses les mieux notées fonctionnent parfaitement (un peu vieux mais fonctionne toujours), mais je tiens à mentionner que depuis Android N, nous pouvons tous configurer vos applications pour disposer de certificats SSL de confiance diff (pour la publication, le débogage, etc.). , y compris le certificat Charles SSL Proxy (si vous téléchargez le certificat Charles et mettez le fichier .pem dans votre dossier raw). Plus d'informations peuvent être trouvées ici: https://developer.Android.com/training/articles/security-config.html

La documentation officielle de Charles peut également être utile pour configurer ceci: https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/

J'espère que cela vous aidera à configurer Charles dans votre projet d'application, pas sur chaque appareil Android.

3
Sniper

Pour le nouvel émulateur, il peut être utile de lancer depuis la ligne de commande en utilisant: 

emulator -netdelay none -netspeed full -avd <emulator_name> -http-proxy http://<ip-address>:8888

Assurez-vous de suivre les conseils de @ User9527 ci-dessus pour le reste de la configuration.

0
AllDayAmazing

Pour moi, le problème était que l'adresse IP que Charles m'avait dit de router dans mes paramètres de proxy était incorrecte. Pour résoudre ce problème, j'ai fini par aller à ifconfig dans le terminal et à essayer les différentes adresses IP (listées à côté de inet) sur le port 8888 pour les connexions actives en cours.

0
Charlton Provatas