User Tools

Site Tools


Writing /net/www/auesnard/teaching/data/cache/2/245742cbedf2db2ddb0576e1f38a55e7.metadata failed
secres:https-interception
Writing /net/www/auesnard/teaching/data/cache/b/b917139305956507b1746900fb337322.xhtml failed

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
secres:https-interception [2017/11/24 15:17] orelsecres:https-interception [2024/03/18 15:06] (current) – external edit 127.0.0.1
Line 3: Line 3:
 Nous allons mettre en oeuvre le mécanisme d'interception HTTPS, qui consiste à faire in Man-in-the-Middle pour déchiffre le traffic HTTPS entre le client et le serveur ! Nous allons mettre en oeuvre le mécanisme d'interception HTTPS, qui consiste à faire in Man-in-the-Middle pour déchiffre le traffic HTTPS entre le client et le serveur !
  
- 
-=== Démo === 
  
 Considérons le réseau suivant : Considérons le réseau suivant :
  
  
-  Client Web <-----> Proxy <--- (...) --> Server Web (https://nile.metal.fr)+  Client Web <-----> Proxy <--- (...) --> Server Web (https://nile.metal.fr)  
  
-  + 
 +=== Proxy SSL === 
 + 
 +Voici le code de notre proxy SSL :
  
 <code python sslproxy.py> <code python sslproxy.py>
Line 18: Line 19:
 import ssl import ssl
 import sys import sys
-import OpenSSL 
 import time import time
 import datetime import datetime
Line 126: Line 126:
 </code> </code>
  
 +=== Génération des faux certificats ===
  
 Commençons par générer un //fake CA// :  Commençons par générer un //fake CA// : 
  
-  $ certtool --generate-privkey --outfile ca-key.pem +  $ certtool --generate-privkey --outfile fake-ca-key.pem 
-  $ certtool --generate-self-signed --load-privkey ca-key.pem --outfile ca-cert.pem +  $ certtool --generate-self-signed --load-privkey fake-ca-key.pem --outfile fake-ca-cert.pem 
-  $ certtool --certificate-info --infile ca-cert.pem   + 
 +Voici les réponses à donner strictement :
  
   * La plupart des champs peuvent rester vides.   * La plupart des champs peuvent rester vides.
-  * Common name: CA+  * Common name: FAKECA
   * The certificate will expire in (days): 255     * The certificate will expire in (days): 255  
   * Does the certificate belong to an authority? (y/N): y   * Does the certificate belong to an authority? (y/N): y
Line 140: Line 142:
   * CRL signing: y   * CRL signing: y
   * All other extensions: NO (required)   * All other extensions: NO (required)
 +
 +Pour afficher le contenu de son certificat :
 +
 +  $ certtool --infile fake-ca-cert.pem -i
  
 Générons maintenant le //fake// certifcat de notre serveur.  Générons maintenant le //fake// certifcat de notre serveur. 
  
-   $ certtool --generate-privkey --outfile server-key.pem +   $ certtool --generate-privkey --outfile fake-server-key.pem 
-   $ certtool --generate-certificate --load-privkey server-key.pem --outfile server-cert.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem +   $ certtool --generate-certificate --load-privkey fake-server-key.pem --outfile fake-server-cert.pem --load-ca-certificate fake-ca-cert.pem --load-ca-privkey fake-ca-key.pem 
-   $ certtool --certificate-info --infile server-cert.pem + 
-   +Voici les réponses à donner strictement : 
   * La plupart des champs peuvent rester vides   * La plupart des champs peuvent rester vides
   * CN=nile.metal.fr   * CN=nile.metal.fr
Line 155: Line 162:
   * Will the certificate be used for encryption (not required for TLS)? (y/N): y   * Will the certificate be used for encryption (not required for TLS)? (y/N): y
  
- +Vous pouvez également utiliser le script suivant pour générer automatiquent le //fake// certificat pour le serveur nile.metal.fr :
-Vous pouvez également utiliser le script suivantpour générer automatiquent le //fake// certificat pour le serveur nile.metal.fr :+
  
   ./gen-fake-cert.py nile.metal.fr 443   ./gen-fake-cert.py nile.metal.fr 443
Line 166: Line 172:
 import sys import sys
 import pprint import pprint
-import OpenSSL+import OpenSSL  # deprecated ?
 import time import time
 import datetime import datetime
 import os import os
 import struct import struct
- 
  
 # this certificate must be trusted by the client victim! # this certificate must be trusted by the client victim!
Line 275: Line 280:
 </code> </code>
      
 +
 +=== Lancement du Proxy HTTPS ===
 +
 Lancement du proxy : Lancement du proxy :
  
Line 281: Line 289:
   ./sslproxy.py nile.metal.fr 443 4444   ./sslproxy.py nile.metal.fr 443 4444
  
 +=== Mise en oeuvre avec un client ===
  
 Sur le client : Sur le client :
Line 288: Line 297:
 Pour ajouter le //fake// CA dans le store du client, il faut faire : Pour ajouter le //fake// CA dans le store du client, il faut faire :
  
-  openssl x509 -in ca-cert.pem -inform PEM -out ca-cert.crt+  cp ca-cert.pem ca-cert.crt # renommage
   cp ca-cert.crt /usr/share/ca-certificates/mycert/   cp ca-cert.crt /usr/share/ca-certificates/mycert/
   dpkg-reconfigure ca-certificates   dpkg-reconfigure ca-certificates
      
 +Puis, il suffit de faire :
 +  
 +  wget -4 https://nile.metal.fr
 +  
 +
 +Video de démo par A. Guermouche : https://www.youtube.com/watch?v=KURaBFMn4xg
 +
 ==== Documentation ==== ==== Documentation ====
  
-Le code et la documentation du projet sont ici : https://gitlab.inria.fr/esnard/https-interception +Le code et la documentation du projet (version antérieure) sont ici : https://gitlab.inria.fr/esnard/https-interception 
  
 About HTTPS interception: About HTTPS interception:
secres/https-interception.1511536623.txt.gz · Last modified: 2024/03/18 15:05 (external edit)