web-dev-qa-db-fra.com

Comment utiliser la clé privée pour déchiffrer le trafic HTTPS envoyé et reçu depuis mon propre navigateur avec Wireshark

Je travaille avec un site Web qui envoie des demandes d'API. Je voudrais écrire à un client pour faire les demandes moi-même, mais pour ce faire, je devrais d'abord voir les charges utiles de la demande. Cependant, la connexion est sécurisée et donc je ne peux pas voir les données dans Wireshark comme ça.

J'ai découvert que Wireshark prend en charge le déchiffrement SSL: http://wiki.wireshark.org/SSL

Cependant, cela n'explique pas comment le fichier de clé privée doit être obtenu ou généré, alors je suis allé voir autour de moi et j'ai trouvé cette entrée de blog: http://blog.stalkr.net/2010/03/codegate- décryptage-https-ssl-rsa-768.html

Après avoir trouvé les paquets appropriés comme indiqué dans les images, j'ai exporté le certificat, mais contrairement au défi qu'ils faisaient, la connexion établie pour moi utilise RSA-2048 et ne fournit pas la factorisation (je suppose que les vrais certificats ne fournissent pas que , seulement ceux pour les jeux et autres).

Puis-je décrypter les paquets HTTPS envoyés à des sites Web tiers? Comment générer le fichier de clé requis?

18
MxLDevs

Wireshark est un outil très puissant. Dans la plupart des cas, les consoles de débogage (sans addon) des navigateurs firefox et chrome devraient suffire. Les deux ont des moniteurs réseau qui sont suffisants la plupart du temps. Soyez conscient que le moniteur Firefox ne fonctionne pas t supporte encore les websockets.

Si vous vouliez toujours utiliser Wireshark, envisagez d'utiliser le fichier SSLKEYLOGFILE, plus d'aide sur this et this , et votre page wiki Wiredhark liée.

14
user10008

La clé privée est privée pour le serveur Web. Si vous ne contrôlez pas le serveur Web, vous ne devriez pas pouvoir l'obtenir. Le certificat ne contient que la clé publique, il ne vous sera donc pas très utile. Vous pouvez essayer de configurer un serveur proxy https et lancer une attaque par l'homme du milieu - dans ce cas, vous auriez la clé de votre serveur proxy.

Essayez-vous de casser le protocole à partir d'un logiciel ou utilisez-vous normalement un navigateur pour accéder au service?

Dans le second cas, vous pouvez utiliser le temporaire de la session en configurant Firefox pour enregistrer la clé dans un fichier, comme l'a suggéré user10008: recherchez SSLKEYLOGFILE dans la page wiki que vous avez liée et les liens que user10008 publié.

11
pqnet

Vous ne pouvez pas , sauf si vous avez un contrôle administratif sur le serveur Web tiers ou que vous récupérez le certificat par d'autres moyens néfastes. SSL/TLS dépend du certificat privé qui reste privé.

De plus, même si vous disposiez de la clé privée du serveur, vous ne pourrez peut-être pas décrypter le trafic d'une session antérieure si Perfect Forward Secrecy a été utilisé. Dans ce cas, vous devez connaître la clé privée spécifique utilisée pour votre session unique.

En principe, parce que vous êtes le client, vous avez accès au pre_master_secret qui est ce dont vous avez besoin pour dériver le master_secret. Le master_secret est la clé symétrique qui est réellement utilisée pour crypter votre session. Comme l'a dit @pqnet, il existe des moyens de l'utiliser dans FireFox et Chrome , bien que cela dépende du logiciel client, et je ne suis pas sûr de Flash. Cependant, il existe des méthodes plus simples pour inspecter votre propre trafic HTTPS ...

Proxys locaux

Puisqu'il s'agit de votre propre connexion, il n'y a aucune raison pour laquelle vous ne pouvez pas passer le site Web via un serveur proxy. De nombreux serveurs proxy sont configurés pour autoriser la transmission SSL, ce qui vous donne toujours un chiffrement de bout en bout, mais vous pouvez rompre cela en mettant fin à votre connexion sur le serveur proxy (si vous faites confiance au certificat SSL du proxy). Le proxy établira alors sa propre connexion SSL au site Web tiers, en transmettant tout le trafic que vous envoyez. Les entreprises utilisent parfois la même méthode pour inspecter le trafic HTTPS sortant de leurs utilisateurs (qui est controversé). C'est essentiellement un homme au milieu.

Browser <---> Local Proxy <---> Website
          ^                 ^
        HTTPS             HTTPS

Les proxys locaux s'exécutent sur votre propre machine et vous permettent d'inspecter et même de modifier le trafic qui les traverse. Si un attaquant tentait de le faire, l'utilisateur verrait un avertissement du navigateur pour montrer qu'il n'a pas reçu de certificat valide pour le site Web demandé. Cependant, vous pouvez configurer votre machine pour faire confiance au certificat CA du proxy local.

Deux procurations locales populaires qui fonctionnent avec le trafic HTTPS sont:

Burp Suite a Prise en charge de la sérialisation AMF intégrée . Fiddler semble avoir une extension .

8
itscooper

Ajout au message de itscooper, vous pouvez également utiliser Charles Proxy avec un certificat de confiance installé sur l'appareil/navigateur et permettre à Charles de déchiffrer SSL afin que vous puissiez lire le trafic. Je le fais beaucoup lorsque je teste des appareils qui communiquent via SSL.

http://www.charlesproxy.com/documentation/proxying/ssl-proxying/

2
JasonG

SSL a été conçu pour vous empêcher de faire exactement ce que vous tentez. Vous avez besoin de la clé pour accéder à des communications privées, avec ou sans Wireshark.

Plusieurs réponses suggèrent une attaque de l'homme du milieu, qui devrait fonctionner avec beaucoup d'efforts ... mais s'il s'agit d'une API publique, elle est probablement documentée. En particulier, s'il s'agit d'une API de service Web , vous pouvez obtenir WSDL à partir du navigateur en ajoutant l'URL du noeud final avec ?WSDL. Cela donnera une liste complète des méthodes et des types de retour.

1
Mashmagar