Pour bien commencer
Cette session de travaux pratique est la suite directe du cours magistrale disponible dans le même espace (voir ici).
Son objectif est de mettre en application les principes évoqués lors du CM, et manipuler les outils de base qui permettent d'interragir avec les certificats.
Règles et astuces pour réaliser ce TP
Ce TP utilise deux outils :
- Un navigateur web de votre choix
- Git Bash pour simuler un environnement Linux et disposer de tous les outils nécéssaires
Lors de sa réalisation, essayez de respecter les règles et de suivre les conseils ci-dessous :
- Les commandes présentées dans le TP doivent être lancées depuis l'invite de commande Git Bash : ce ne sont pas des commandes directement compatibles avec powershell. Pour vérifier si tout est bon sur votre poste, direction les Prérequis !
- L'objectif de ce TP est de se familiariser avec les outils de base de gestion des certificats : explorez et essayez des choses !
- Pour chaque objectif, des indices et la solution sont présents. Avant d'aller directement à la solution, essayer par vous même !
Liens vers les différentes parties
- Prérequis : Les prérequis pour effectuer ce TP
- Partie 1 : Outils de base et lecture d’un certificat
- Partie 2 : Générer une suite de certificats
- Partie 3 : Faire confiance à un certificat
- Partie 4 : Echange en mTLS
CheatSheets
Openssl
Openssl est l'outil de base pour manipuler les certificats. Il est capable de les générer, mais aussi de les lires, que ce soit sous forme de fichiers ou en se connectant a un serveur distant.
Les commandes suiavntes sont utiles et gagnent à être mémorisées :
openssl x509 -in mon-certificat.pem -noout -text
openssl s_client -connect google.com:443 -showcerts
openssl s_client -connect www.capgemini.com:443 2>/dev/null </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > cert.pem
openssl x509 -in cert.pem -noout -ext keyUsage # L'extension Key Usage subjectAltName
openssl x509 -in cert.pem -noout -ext subjectAltName # Les SAN
Les extension x509v3
La liste des extentions possible dans la norme x509v3 est disponible ici
openssl genrsa # Pour la generation de clé RSA
openssl ecpraram # La generation de clé Eliptic Curve (via ed25519 par exemple)
openssl rsa -in my-private.key -pubout > my-public.key # Pour du RSA
openssl pkey -in my-private.key -pubout > my-public.key # Polyvalent, fonctionne a la fois pour RSA et les algorithmes EC
cURL
cURL est un outil dédié aux requêtes HTTP(s), c'est à dire fait pour requêter un serveur web. Mais c'est aussi un très bon allié pour tester le chiffrement TLS, car qui dit HTTPS dit HTTP over TLS !
Les commandes suiavntes sont utiles et gagnent à être mémorisées :
curl -s https://google.com # Dans la sortie standard
curl -s https://google.com > contenu # Dans un fichier 'contenu'
Par défaut, CURL effectue des requêtes HTTP GET, ce qui sera suffisant pour ce TP (ce n'est pas un TP sur les API). Voici quelques paramètres bon à connaitre :
- -k : permet de requête un site web HTTPS sans vérifier les certificats (on fait confiance au partenaire)
- --cacert : permet de founir le chemin du certificat / store qui sera utilisé pour vérifier le certificat émis par le partenaire
- -s : n'affiche pas les messages internes a curl, et permet de récuprére le contenu distant sans artefacts
- -vvvvv : l'inverse de -s, va logger énormément d'informations utiles pour le debug sur les échanges avec le serveur distant
- -cert : permet de fournir un certificat client, pour les communications en mTLS
Soit un certificat client au format PKCS#12, protégé par un mot de passe. Pour pouvoir échanger en mTLS avec ce store, la commande suivante devrait fonctionner :
curl --cert-type P12 --cert <mon_fichier.p12>:<store_password> https://mon.super.site