Elouan

Certificats et PKI

Comment on fait confiance à une clé publique : certificats X.509, autorités de certification, chaîne de confiance, révocation et Certificate Transparency.

Elouan

Série Cryptographie appliquée · article 3 sur 3
  1. Hachage, chiffrement, encodage : ne plus confondre
  2. Chiffrement symétrique et asymétrique
  3. Certificats et PKI

L’article précédent laissait une question ouverte : quand un serveur me présente sa clé publique, comment savoir qu’elle est vraiment la sienne, et pas celle d’un attaquant placé au milieu ? La réponse d’Internet, c’est le certificat et la PKI (infrastructure à clés publiques) : un système de tiers de confiance qui se portent garants des clés.

Le certificat : une carte d’identité signée

Un certificat X.509 est un document qui dit, en substance : « cette clé publique appartient à www.exemple.fr », signé par une autorité de certification (AC) à laquelle on fait confiance.

Ce qu’il contient :

ChampContenu
SujetL’identité du titulaire
Subject Alternative Name (SAN)Les noms couverts : exemple.fr, www.exemple.fr, *.exemple.fr…
Clé publiqueLa clé du titulaire
ÉmetteurL’AC qui a signé
ValiditéDate de début et de fin
UsagesAuthentification serveur, client, signature de code…
SignatureLa signature de l’AC sur tout ce qui précède

Certificat public, clé privée secrète

Le certificat est public : le serveur l’envoie à chaque connexion. La clé privée associée reste sur le serveur et n’en sort jamais. C’est elle qui permet au serveur de prouver, pendant la poignée de main TLS, qu’il est bien le titulaire du certificat.

# Afficher le certificat d'un site
openssl s_client -connect www.exemple.fr:443 -servername www.exemple.fr </dev/null 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates -ext subjectAltName

La chaîne de confiance

Les AC ne signent pas directement les certificats des sites avec leur clé la plus précieuse. Elles utilisent une chaîne :

AC racine           (auto-signée, préinstallée dans le système ou le navigateur, gardée hors ligne)
  └── AC intermédiaire   (signée par la racine, signe au quotidien)
        └── Certificat du serveur   (www.exemple.fr)

Quand un navigateur reçoit un certificat, il vérifie :

  1. que chaque maillon est signé par le maillon du dessus, jusqu’à une racine de confiance ;
  2. que chaque certificat est dans sa période de validité ;
  3. que le nom demandé figure dans le champ SAN ;
  4. que les usages sont corrects ;
  5. que le certificat n’est pas révoqué.

Si une seule vérification échoue, il affiche une alerte.

Une racine de confiance, c’est un pouvoir énorme

Toute AC racine présente sur un poste peut signer un certificat pour n’importe quel site, que le poste acceptera sans alerte. Installer une nouvelle racine sur un poste, c’est permettre l’interception de tout son trafic chiffré. C’est volontaire dans le cas d’un proxy d’inspection d’entreprise, et c’est une technique d’attaque quand ça ne l’est pas (T1553.004 dans MITRE ATT&CK).

DV, OV, EV

NiveauCe que l’AC vérifieExemple
DV (Domain Validation)Que le demandeur contrôle le domaine (fichier sur le site, enregistrement DNS)Let’s Encrypt, en quelques secondes
OV (Organization Validation)En plus, l’existence de l’organisationCertificats d’entreprise
EV (Extended Validation)Vérifications juridiques pousséesLes navigateurs ne l’affichent plus de façon particulière

Un certificat valide ne prouve pas l’honnêteté

La très grande majorité des certificats sont DV. Ils prouvent seulement que le demandeur contrôlait le domaine. Un site de phishing en connexion-banque-exemple.com peut avoir un certificat parfaitement valide.

La révocation

Si une clé privée fuit, il faut révoquer le certificat avant sa date d’expiration.

MécanismePrincipeLimite
CRLL’AC publie la liste des certificats révoquésListes parfois énormes, mises à jour périodiques
OCSPLe client interroge l’AC en temps réelProblèmes de vie privée et de disponibilité
OCSP staplingLe serveur joint lui-même une réponse OCSP récenteDoit être activé sur le serveur

En pratique, la révocation fonctionne mal sur le web, ce qui explique la tendance aux certificats de courte durée : Let’s Encrypt délivre des certificats de 90 jours, et l’industrie s’est engagée à réduire progressivement la durée maximale des certificats publics.

Certificate Transparency

Depuis plusieurs années, les AC publiques doivent inscrire chaque certificat émis dans des journaux publics, en ajout seul : c’est Certificate Transparency (CT). Les navigateurs refusent les certificats qui n’y figurent pas.

Pour un défenseur, c’est une source précieuse :

  • surveiller les certificats émis pour son propre domaine (un certificat inattendu peut signaler une erreur ou une attaque) ;
  • découvrir des sous-domaines oubliés ;
  • repérer des domaines qui imitent le sien, souvent préparés pour du phishing.

On interroge ces journaux, par exemple, sur crt.sh.

Les certificats auto-signés

Un certificat auto-signé est signé par sa propre clé, sans AC. Aucun navigateur ne lui fait confiance par défaut. On en trouve sur les interfaces d’administration d’équipements internes… et sur les serveurs de commande de nombreux malwares. Dans une analyse réseau, un certificat auto-signé avec des champs vides ou par défaut, vers une IP inconnue, est un indice à creuser.

La PKI d’entreprise

Beaucoup d’entreprises ont leur propre PKI, souvent ADCS (Active Directory Certificate Services) dans les environnements Windows. Elle délivre des certificats pour les serveurs internes, l’authentification des machines (802.1X, VPN), la connexion par carte à puce, ou la signature de documents.

Une PKI interne fait partie des systèmes les plus sensibles (niveau 0 dans le modèle de cloisonnement, voir la série Active Directory) : un certificat d’authentification délivré à tort peut permettre de s’authentifier comme un autre utilisateur, jusqu’à l’administrateur du domaine. Des modèles de certificats trop permissifs sont une cause connue de compromission de domaines, et l’audit de la configuration d’ADCS fait désormais partie des vérifications courantes.

L'essentiel

  • Un certificat X.509 associe une clé publique à une identité (un nom de domaine, une personne, une machine), et il est signé par une autorité de certification (AC).
  • Chaîne de confiance : certificat du serveur → AC intermédiaire → AC racine. Les racines sont préinstallées dans le système ou le navigateur.
  • Un navigateur vérifie : la signature de chaque maillon, la période de validité, que le nom demandé figure dans le champ SAN, et que le certificat n'est pas révoqué.
  • Validation DV (domaine), OV (organisation), EV (validation étendue). Un certificat DV prouve seulement le contrôle du domaine.
  • Révocation : listes CRL ou OCSP. Certificate Transparency : tout certificat public est inscrit dans des journaux publics consultables (crt.sh).
  • Une PKI interne (par exemple ADCS dans un domaine Windows) délivre des certificats pour l'entreprise. Mal configurée, elle peut devenir un chemin vers la compromission du domaine.
  • La clé privée ne quitte jamais son propriétaire. Le certificat, lui, est public.

Idées reçues

Un certificat valide prouve-t-il que le site est légitime ?

L'erreur courante. Répondre oui.

En réalité. Un certificat DV prouve seulement que le demandeur contrôle le nom de domaine au moment de la demande. Un domaine de phishing peut obtenir un certificat valide gratuitement. Le certificat garantit qu'on parle bien au domaine affiché, pas que ce domaine est honnête.

Quelle différence entre la clé privée et le certificat ?

L'erreur courante. Les confondre, ou penser que le certificat est secret.

En réalité. Le certificat est public : il contient la clé publique, l'identité et la signature de l'autorité. Le serveur l'envoie à chaque connexion. La clé privée, elle, reste sur le serveur et ne doit jamais en sortir. Si elle fuit, il faut révoquer le certificat et en générer un nouveau avec une nouvelle paire de clés.

Pourquoi les entreprises qui inspectent le trafic HTTPS déploient-elles leur propre AC sur les postes ?

L'erreur courante. Dire que c'est pour signer leurs sites internes uniquement.

En réalité. Pour l'interception TLS : le proxy génère à la volée un certificat pour chaque site visité, signé par l'AC interne. Comme cette AC est installée comme racine de confiance sur les postes, le navigateur l'accepte sans alerte. C'est aussi pour ça que l'ajout d'une AC racine inconnue sur un poste est un événement sensible : il permet d'intercepter tout son trafic chiffré.

À quoi sert Certificate Transparency pour un défenseur ?

L'erreur courante. Ne pas connaître le mécanisme.

En réalité. Toutes les AC publiques doivent inscrire les certificats qu'elles émettent dans des journaux publics. On peut donc surveiller (par exemple sur crt.sh) les certificats émis pour son propre domaine ou pour des noms qui lui ressemblent, et repérer des sous-domaines oubliés ou des domaines de phishing en préparation.

Tester ses connaissances

Références

  • Bulletproof TLS and PKI (2e éd.)Ivan Ristić · Feisty Duck
  • Serious Cryptography (2e éd.)Jean-Philippe Aumasson · No Starch Press

Textes de référence en ligne