web-dev-qa-db-fra.com

Comment décrypter le trafic SSL avec un renifleur de paquets lorsque j'ai la clé privée?

Comment décryptez-vous les paquets SSL (trafic) avec la clé privée? J'ai essayé de le faire avec ssldump et openssl mais rien n'a fonctionné.

6
user104787

Ssldump est censé être en mesure de le faire, mais il semble être non entretenu (dans l'archive source de la dernière version, la date de la dernière modification de tous les fichiers est en 2002 ou avant), il est donc il est tout à fait possible qu'il ne prenne pas en charge SSL/TLS plus récent; en fait, il est hautement improbable qu'un logiciel de 2002 puisse traiter les nouveaux formats de cryptage définis dans TLS 1.2 (AES/GCM). TLS 1.1 a été publié en 2006 et TLS 1.2 en 2008.

OpenSSL est une bibliothèque qui implémente le protocole, mais n'est pas destinée à analyser une session enregistrée.

Vous pouvez avoir plus de chance avec Wireshark , qui a une documentation abondante sur la façon de l'utiliser pour décrypter les sessions enregistrées.

Il y a un paramètre important à l'esprit: le déchiffrement d'une session enregistrée passivement (avec une copie de la clé privée du serveur) ne fonctionne que si l'échange de clés était de type RSA ou DH statique; avec les suites de chiffrement "DHE" et "ECDHE", vous ne pourrez pas décrypter une telle session, même en connaissant la clé privée du serveur. Dans ce cas, vous aurez besoin du "secret principal" négocié, ou d'utiliser la clé privée du serveur pour intercepter activement la connexion (dans une configuration Man-in-the-Middle ).

5
Tom Leek

Si vous avez accès au côté client effectuant les connexions et que le navigateur est Firefox (ou, je crois, basé sur NSS), vous pouvez vider les clés éphémères établies pour n'importe quel site. Pour ce faire, exécutez:

$ export SSLKEYLOGFILE=/path/to/logfile.log
$ firefox

Tu trouveras logfile.log contient une série de lignes le long des lignes de CLIENT_RANDOM <hex> - vous pouvez les trouver documentés ici .

Dans Wirehark, vous pouvez ensuite aller à Edit | Preferences | Protocols | SSL et définissez le "nom du fichier journal pré-maître-secret" dans le fichier que vous avez défini ci-dessus.

Toutes les connexions via votre session de navigation Firefox seront ensuite déchiffrées et visibles, quel que soit l'hôte.

À titre de mise en garde, il se peut que vous ne voyiez plus nécessairement un http facile à comprendre; Je viens d'essayer cela contre google.com et j'utilise maintenant apparemment http/2.

Je suppose ici que vous avez un service compatible SSL et votre propre clé privée pour cela et que vous souhaitez afficher la session non cryptée - un exemple vraiment utile de cela est de visualiser http/2 en pratique, car il est rarement déployé sans tls (la plupart des navigateurs ne l'utiliseront pas sur http) et se demandent pourquoi vous ne pouvez pas, sur une configuration moderne. Le problème, comme le dit Tom, c'est que vous avez besoin des clés éphémères.

1
diagprov

Vous pouvez essayer la commande suivante avec tshark (wirehark basé sur terminal) pour déchiffrer une session en direct:

tshark -o "ssl.desegment_ssl_records: TRUE" -o "ssl.desegment_ssl_application_data: TRUE" -o "ssl.keys_list:,443,http,./private_key.pem" -o "ssl.debug_file:rsa_private.log" -R "(tcp.port eq 443)" port 443

Notez que cela ne décryptera pas les données d'application.

0
user90696