📜 C3.2.3 — Certificats numériques & PKI

Bloc B3 Module M3.2 BTS SIO SISR 3h30
FormationBTS SIO option SISR — IRIS Mediaschool
BlocB3 — Cybersécurité des services informatiques
ModuleM3.2 — Identité numérique et authentification
CoursC3.2.3 — Certificats numériques et PKI · Séance 1/1
CompétenceB3.2 — Préserver l'identité numérique de l'organisation
Durée3h30 (10 min intro + 50 min PKI/TLS + 25 min Let's Encrypt + 85 min TP + 10 min synthèse)
Contexte PMEInnovatTech 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

ChampDescription
Version, Numéro de sérieIdentification unique du certificat
SubjectTitulaire : CN (Common Name), O, OU, C
Subject Alternative Names (SAN)Liste explicite des domaines couverts (remplace l'ancien usage du CN seul)
IssuerAC qui a signé le certificat
notBefore / notAfterPériode de validité
Key Usage / Extended Key UsageUsages autorisés (serverAuth, clientAuth…)
Basic ConstraintsIndique si le certificat peut servir d'AC (CA:TRUE/FALSE)
Signature de l'ACAtteste 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écanismeDescriptionAvantages / Inconvénients
CRL (Certificate Revocation List)Liste périodique publiée par l'AC contenant les N° de série révoquésSimple mais lourd et potentiellement obsolète
OCSP (Online Certificate Status Protocol)Vérification à la demande : le client interroge le serveur OCSP de l'ACTemps réel mais latence supplémentaire
OCSP StaplingLe serveur récupère la réponse OCSP et la joint lors du handshake TLSMeilleur : 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
⚠️ Sécurité des clés privées

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>/

🔜 Cours suivant — C3.3.1 (Module M3.3)

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 ?

  1. AC Racine → Certificat Final → AC Intermédiaire
  2. AC Racine → AC Intermédiaire → Certificat Final
  3. AC Intermédiaire → AC Racine → Certificat Final
  4. 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) ?

  1. HTTP-01 (fichier sur le serveur web)
  2. TLS-ALPN-01 (réponse sur le port 443)
  3. DNS-01 (enregistrement TXT DNS)
  4. 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 ?

  1. Il révoque les certificats plus rapidement en contactant l'AC directement
  2. C'est le serveur qui récupère la réponse OCSP et la joint au handshake TLS, réduisant la latence
  3. Il remplace complètement les CRL rendant celles-ci inutiles
  4. 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).