📜 C3.2.3 — Certificats numériques & PKI
| Formation | BTS SIO option SLAM — IRIS Mediaschool |
|---|---|
| Bloc | B3 — Cybersécurité des services informatiques |
| Module | M3.2 — Identité numérique et authentification |
| Cours | C3.2.3 — Certificats numériques et PKI · Séance 1/1 |
| Compétence | B3.2 — Préserver l'identité numérique de l'organisation |
| Durée | 3h30 (10 min intro + 50 min PKI/TLS + 25 min Let's Encrypt + 85 min TP + 10 min synthèse) |
| Contexte PME | InnovatTech SARL — Nginx sur Debian 12, domaine innovattech.fr |
Accroche (10 min)
En mars 2020, Let's Encrypt a révoqué 3 048 289 certificats en moins de 24 heures suite à un bug de validation. Des millions de sites HTTPS ont affiché des erreurs de sécurité. Les infrastructures automatisées (certbot + timer systemd) n'ont rien remarqué. Les autres ont été prises au dépourvu. La leçon : l'automatisation du renouvellement des certificats n'est pas une option, c'est une nécessité opérationnelle.
Section 1 — La PKI : infrastructure de confiance (~50 min)
Principe de la chaîne de confiance
Votre navigateur fait confiance à amazon.com sans le connaître personnellement parce qu'il reconnaît que le certificat d'Amazon a été signé par une autorité de certification (AC) que le système d'exploitation considère digne de confiance. C'est la Public Key Infrastructure (PKI) : une délégation de confiance organisée et vérifiable.
AC Racine (Root CA) ← hors ligne, clé dans HSM
│ signe
▼
AC Intermédiaire (ICA) ← en ligne, délivre les certificats
│ signe
▼
Certificat Final ← www.innovattech.fr
La AC racine conserve sa clé privée hors ligne (HSM ou coffre-fort). Elle signe uniquement les AC intermédiaires, minimisant l'exposition. Les AC intermédiaires sont en ligne et émettent les certificats finaux. Cette séparation facilite la révocation ou rotation sans impacter la racine.
Certificat X.509 v3 — Champs clés
| Champ | Description |
|---|---|
| Version, Numéro de série | Identification unique du certificat |
| Subject | Titulaire : CN (Common Name), O, OU, C |
| Subject Alternative Names (SAN) | Liste explicite des domaines couverts (remplace l'ancien usage du CN seul) |
| Issuer | AC qui a signé le certificat |
| notBefore / notAfter | Période de validité |
| Key Usage / Extended Key Usage | Usages autorisés (serverAuth, clientAuth…) |
| Basic Constraints | Indique si le certificat peut servir d'AC (CA:TRUE/FALSE) |
| Signature de l'AC | Atteste l'intégrité et l'authenticité du certificat |
# Lire le certificat d'un serveur web
echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -text
# Afficher uniquement les dates de validité
echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -dates
TLS 1.3 — Handshake simplifié
Client Serveur
│──Client Hello (suites, random)──►│
│◄──Server Hello (suite choisie)───│
│◄──Certificate (chaîne)───────────│
│──Verify cert (signé par AC connue)│
│──Client Finished (clé dérivée)──►│
│◄──Server Finished────────────────│
│═══════════ Données chiffrées ════│
Forward Secrecy : les clés éphémères (ECDHE) garantissent que même si la clé privée du serveur est compromise ultérieurement, les communications passées ne peuvent pas être déchiffrées rétroactivement.
Révocation des certificats
| Mécanisme | Description | Avantages / Inconvénients |
|---|---|---|
| CRL (Certificate Revocation List) | Liste périodique publiée par l'AC contenant les N° de série révoqués | Simple mais lourd et potentiellement obsolète |
| OCSP (Online Certificate Status Protocol) | Vérification à la demande : le client interroge le serveur OCSP de l'AC | Temps réel mais latence supplémentaire |
| OCSP Stapling | Le serveur récupère la réponse OCSP et la joint lors du handshake TLS | Meilleur : réduit la latence et la charge sur l'AC |
Section 2 — Let's Encrypt et automatisation ACME (~25 min)
Let's Encrypt est une AC publique et gratuite (ISRG, 2016) qui automatise l'émission via le protocole ACME (RFC 8555). Méthodes de validation :
- HTTP-01 : fichier placé sur le serveur web (port 80) — simple, mais pas de wildcard
- DNS-01 : enregistrement TXT DNS — nécessaire pour les certificats
*.innovattech.fr - TLS-ALPN-01 : réponse spéciale sur le port 443
# Installer certbot pour Nginx (Debian)
sudo apt install certbot python3-certbot-nginx
# Obtenir un certificat en production
sudo certbot --nginx -d www.innovattech.fr -d innovattech.fr
# Tester le renouvellement (dry-run — aucun certificat émis)
sudo certbot renew --dry-run
# Vérifier les certificats installés
sudo certbot certificates
# Vérifier le timer systemd de renouvellement automatique
systemctl status certbot.timer
TP — Passer InnovatTech en HTTPS (85 min)
Scénario : Le site d'InnovatTech (Nginx sur Debian 12, domaine innovattech.fr) tourne en HTTP. Mission : migrer vers HTTPS avec Let's Encrypt, vérifier la chaîne de confiance et automatiser le renouvellement. Bonus : créer une PKI interne pour l'authentification serveur-à-serveur.
Étape 1 — Utiliser l'environnement de staging Let's Encrypt
sudo apt update && sudo apt install -y certbot python3-certbot-nginx
# --staging : évite les quotas de production pendant les tests
sudo certbot --nginx --staging -d www.innovattech.fr --email admin@innovattech.fr --agree-tos
Étape 2 — Vérifier la configuration Nginx
sudo nginx -t && sudo systemctl reload nginx
ss -tlnp | grep :443
Étape 3 — Analyser le certificat installé
# Lire le certificat (5 champs à identifier dans le livrable)
openssl x509 -in /etc/letsencrypt/live/www.innovattech.fr/cert.pem -noout -text
# Vérifier la chaîne de confiance
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt /etc/letsencrypt/live/www.innovattech.fr/fullchain.pem
# Résultat attendu : .../fullchain.pem: OK
Étape 4 — Tester le renouvellement automatique
sudo certbot renew --dry-run
systemctl list-timers --all | grep certbot
Bonus — PKI interne pour mTLS serveur-à-serveur
# 1. Créer la clé et le certificat auto-signé de l'AC racine
openssl genpkey -algorithm RSA -out rootCA.key -pkeyopt rsa_keygen_bits:4096
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem -subj "/C=FR/O=InnovatTech SARL/CN=InnovatTech Root CA"
# 2. Générer la clé et le CSR pour un serveur interne
openssl genpkey -algorithm RSA -out server.key -pkeyopt rsa_keygen_bits:2048
openssl req -new -key server.key -out server.csr -subj "/C=FR/O=InnovatTech SARL/CN=server.innovattech.fr"
# 3. Signer le certificat serveur avec les SAN appropriés
cat > v3_server.ext <<'EXT'
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature,keyEncipherment
extendedKeyUsage=serverAuth,clientAuth
subjectAltName=DNS:server.innovattech.fr
EXT
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 825 -sha256 -extfile v3_server.ext
# 4. Construire la chaîne complète
cat server.crt rootCA.pem > server_fullchain.pem
La clé privée (privkey.pem, rootCA.key) ne doit être lisible que par root : chmod 600, owner root. En production, protégez toujours la clé racine hors ligne. Les emplacements Let's Encrypt : /etc/letsencrypt/live/<domain>/
Durcissement des systèmes (hardening) : configuration sécurisée de Linux et Windows Server, gestion des patchs, réduction de la surface d'attaque.
Synthèse (10 min)
Question : Quelle est la différence entre un certificat et une clé privée ? Que se passe-t-il si la clé privée d'un serveur web est compromise ?
🎮 Quiz — Testez vos connaissances
3 QCM · 1 Vrai/Faux · 1 Question ouverte
QCM 1 — Structure PKI
Dans une PKI à 3 niveaux, quel est l'ordre correct de la hiérarchie de certification ?
- AC Racine → Certificat Final → AC Intermédiaire
- AC Racine → AC Intermédiaire → Certificat Final
- AC Intermédiaire → AC Racine → Certificat Final
- Certificat Final → AC Intermédiaire → AC Racine
📋 Correction
B — AC Racine → AC Intermédiaire → Certificat Final. L'AC Racine (conservée hors ligne) signe les AC Intermédiaires. Les AC Intermédiaires (en ligne) émettent les certificats finaux (leaf certificates) utilisés par les serveurs web et autres services. Cette séparation en niveaux protège la clé racine et facilite la révocation des AC intermédiaires sans impacter la racine.
QCM 2 — Challenge ACME pour wildcards
Quelle méthode de validation ACME est obligatoire pour émettre un certificat wildcard (ex : *.innovattech.fr) ?
- HTTP-01 (fichier sur le serveur web)
- TLS-ALPN-01 (réponse sur le port 443)
- DNS-01 (enregistrement TXT DNS)
- Manual (vérification manuelle par Let's Encrypt)
📋 Correction
C — DNS-01. Les certificats wildcard (qui couvrent tous les sous-domaines d'un domaine) nécessitent obligatoirement le challenge DNS-01 : il faut créer un enregistrement TXT DNS spécifique (_acme-challenge.innovattech.fr) pour prouver le contrôle du domaine. HTTP-01 ne peut pas être utilisé pour les wildcards car il ne prouve le contrôle que d'un hôte spécifique.
QCM 3 — OCSP Stapling
Qu'est-ce que l'OCSP Stapling améliore par rapport à l'OCSP classique ?
- Il révoque les certificats plus rapidement en contactant l'AC directement
- C'est le serveur qui récupère la réponse OCSP et la joint au handshake TLS, réduisant la latence
- Il remplace complètement les CRL rendant celles-ci inutiles
- Il chiffre le certificat pour empêcher son interception pendant le handshake
📋 Correction
B. Dans l'OCSP classique, le navigateur interroge directement l'AC (latence supplémentaire, charge sur l'AC). Avec OCSP Stapling, c'est le serveur qui récupère périodiquement la réponse OCSP auprès de l'AC et la "colle" (staple) lors du handshake TLS. Le client reçoit ainsi la preuve de validité du certificat directement du serveur, sans aller-retour supplémentaire vers l'AC.
Vrai / Faux
⬜ La clé privée d'un serveur web est contenue dans le certificat X.509 et peut être consultée par les clients qui se connectent.
📋 Correction
FAUX. Un certificat X.509 contient la clé publique du serveur ainsi que des informations d'identité signées par l'AC. La clé privée est un secret conservé exclusivement sur le serveur, jamais transmise ou divulguée. C'est justement grâce à cette asymétrie que le protocole TLS fonctionne : n'importe qui peut avoir la clé publique (dans le certificat), mais seul le serveur peut déchiffrer ou signer avec la clé privée correspondante.
Question ouverte
Expliquez la différence entre un certificat et une clé privée. Que doit-on faire si la clé privée d'un serveur web est compromise ? Quelles sont les conséquences potentielles d'une telle compromission ?
📋 Éléments de réponse
Un certificat est une attestation publique, signée par une AC, qui lie une identité (un nom de domaine) à une clé publique. Il peut être librement distribué. La clé privée est la composante secrète correspondante : elle permet de prouver la possession de la clé publique (en déchiffrant ou en signant des données lors du handshake TLS). Elle doit rester strictement confidentielle (chmod 600, accessible uniquement par root). En cas de compromission : un attaquant peut se faire passer pour le serveur (attaque Man-in-the-Middle), déchiffrer des communications passées si la forward secrecy n'était pas activée, et usurper l'identité du serveur auprès des clients. Actions à mener : 1) Révoquer immédiatement le certificat auprès de l'AC (CRL/OCSP) ; 2) Générer une nouvelle paire clé/certificat ; 3) Déployer le nouveau certificat sur tous les services concernés ; 4) Analyser l'étendue de la compromission ; 5) Notifier les parties prenantes si des données utilisateurs ont pu être interceptées (violation de données RGPD potentielle).
