Skip to content

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 :

  1. 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 !
  2. L'objectif de ce TP est de se familiariser avec les outils de base de gestion des certificats : explorez et essayez des choses !
  3. 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 :

Lire un certificat fichier mon-certificat.pem
openssl x509 -in mon-certificat.pem -noout -text

Lire un certificat distant a l'adresse https://google.com
openssl s_client -connect google.com:443 -showcerts

Télécharger le certificat du site web https://www.capgemini.com dans un fichier cert.pem
openssl s_client -connect www.capgemini.com:443 2>/dev/null </dev/null |  sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > cert.pem

Lire les extentions x509v3 d'un certificat 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


La génération de clé privée
openssl genrsa # Pour la generation de clé RSA
openssl ecpraram # La generation de clé Eliptic Curve (via ed25519 par exemple)

Générer une clé publique depuis une clé privée
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 :

Récupérer le contenu de https://google.com
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