Aller au contenu

EST : enrôler des certificats X.509 par transport sécurisé

EST : enrôler des certificats X.509 par transport sécurisé

Section intitulée « EST : enrôler des certificats X.509 par transport sécurisé »

Enrollment over Secure Transport (EST, littéralement « enrôlement par transport sécurisé ») est un protocole normalisé par l’IETF sous la RFC 7030 (2013) qui permet à un client — serveur, équipement réseau, objet connecté — d’obtenir, de renouveler et de faire générer des certificats numériques X.509 auprès d’une autorité de certification, en s’appuyant entièrement sur TLS pour protéger l’échange. Il répond à un problème très concret : une infrastructure à clés publiques (PKI) ne vaut que par sa capacité à distribuer et renouveler ses certificats sans intervention manuelle répétée, et les méthodes qui précèdent EST — copier un fichier, remplir un formulaire web, utiliser un protocole plus ancien comme SCEP — passent mal à l’échelle ou reposent sur une cryptographie datée.

Pourquoi l’enrôlement de certificats a besoin d’un protocole dédié

Section intitulée « Pourquoi l’enrôlement de certificats a besoin d’un protocole dédié »

Émettre un certificat suppose de répondre à deux questions à chaque fois : le demandeur est-il bien celui qu’il prétend être, et sa requête technique (la clé publique qu’il présente, les usages qu’il demande) est-elle recevable ? Fait à la main, ce travail passe à l’échelle d’une poignée de certificats. Il ne passe plus à l’échelle de milliers d’équipements réseau, de charges de travail éphémères ou d’objets connectés qui doivent chacun détenir un certificat propre, et le renouveler avant son expiration sans qu’un humain n’y touche.

EST répond à ce besoin en normalisant trois choses à la fois : la façon dont un client prouve son identité pour obtenir un premier certificat, la façon dont il prouve la continuité de cette identité pour en obtenir un nouveau à l’expiration, et le format des échanges, indépendant de l’autorité de certification utilisée en coulisses. Le protocole s’adresse en priorité aux environnements où l’enrôlement doit être automatisé — équipements sans interface utilisateur, provisionnement d’objets connectés (IoT), rotation régulière de certificats de service — plutôt qu’à l’émission ponctuelle d’un certificat pour un site web.

Architecture : client, serveur EST et autorité d’enregistrement

Section intitulée « Architecture : client, serveur EST et autorité d’enregistrement »

EST distingue trois rôles, qui peuvent être portés par des systèmes séparés ou regroupés selon le déploiement :

  • Le client EST : l’entité qui demande un certificat. Il génère (ou, dans un cas particulier détaillé plus bas, délègue la génération de) sa paire de clés et prépare une requête de signature de certificat (CSR, Certificate Signing Request) au format PKCS#10.
  • Le serveur EST : le point d’entrée HTTPS qui reçoit les requêtes, les authentifie et les transmet à l’autorité de certification. C’est lui qui expose les points de terminaison décrits plus bas.
  • L’autorité d’enregistrement (RA, Registration Authority), optionnelle : un intermédiaire qui applique la politique d’émission — vérifier qu’une requête est légitime avant de la transmettre à l’autorité de certification (CA, Certificate Authority) elle-même. Un déploiement simple fait porter les rôles de serveur EST et de RA par le même système, devant la CA.

Tous les échanges empruntent HTTPS : des requêtes HTTP GET/POST classiques, sur des chemins fixés par la norme, protégées par TLS. EST ne réinvente ni le transport ni le format de requête de certificat ; il normalise la manière dont on les assemble.

RFC 7030 définit un jeu de points de terminaison, tous relatifs à un préfixe /.well-known/est/ (RFC 7030 réutilise le mécanisme des URI bien connues, RFC 5785) :

  • GET /cacerts — récupère la chaîne de certificats de l’autorité de certification, encapsulée en PKCS#7. C’est la première requête qu’un client effectue : elle lui donne les certificats racine et intermédiaires nécessaires pour valider tout ce qui suivra.
  • POST /simpleenroll — le client soumet sa CSR (PKCS#10) et reçoit en retour son certificat signé, également encapsulé en PKCS#7. C’est l’opération d’enrôlement initial.
  • POST /simplereenroll — même mécanique que simpleenroll, mais pour renouveler un certificat existant : le client s’authentifie avec son certificat EST actuel (voir plus bas), ce qui permet un renouvellement automatique sans jamais revalider l’identité depuis zéro.
  • GET /csrattrs — le serveur indique au client les attributs qu’il attend dans la CSR (par exemple des extensions spécifiques à la politique du déploiement). Utile pour un équipement contraint qui ne connaît pas à l’avance la politique de l’autorité.
  • POST /serverkeygen — variante où c’est le serveur qui génère la paire de clés et la retourne au client, en plus du certificat. Traité séparément ci-dessous : cette opération déplace un moment critique de confiance.
  • POST /fullcmc — chemin d’échange complet basé sur CMC (Certificate Management over CMS, RFC 5272), pour les scénarios que simpleenroll ne couvre pas (preuve de possession plus stricte, archivage de clé). Peu utilisé en dehors d’intégrations PKI déjà construites autour de CMC.

Dans le déroulement normal d’un enrôlement, le client génère lui-même sa paire de clés et ne transmet jamais que sa clé publique, contenue dans la CSR : la clé privée ne quitte jamais son environnement. serverkeygen inverse ce principe pour les équipements incapables de générer une paire de clés de qualité suffisante (matériel contraint, absence de générateur d’aléa fiable) : le serveur EST génère la paire, retourne le certificat et la clé privée nouvellement créée au client.

Cette opération répond à un vrai problème d’équipement contraint, mais elle introduit un instant, aussi bref soit-il, où la clé privée existe hors de l’appareil qui l’utilisera — sur le serveur qui l’a générée, puis sur le canal qui la transporte. Le canal est protégé par TLS et la clé peut être chiffrée pour son destinataire, mais la propriété que la cryptographie asymétrique promet d’habitude (une clé privée qui n’existe jamais que dans un seul endroit) ne tient plus le temps de cette opération. C’est un compromis à faire consciemment, pas un mode par défaut.

Le bootstrap : faire confiance à un serveur EST qu’on ne connaît pas encore

Section intitulée « Le bootstrap : faire confiance à un serveur EST qu’on ne connaît pas encore »

Le point délicat d’EST n’est pas l’enrôlement en régime établi — une fois qu’un client détient un certificat, simplereenroll avec authentification mutuelle TLS (mTLS) suffit à le renouveler indéfiniment. Le point délicat est le premier contact : comment un client, qui ne détient encore aucun certificat de cette PKI, peut-il faire confiance au serveur EST auquel il s’adresse ?

RFC 7030 laisse plusieurs options ouvertes, du plus simple au plus rigoureux :

  • Le client fait déjà confiance à la CA en jeu. Si le certificat TLS du serveur EST est lui-même émis par une autorité déjà présente dans le magasin de confiance du client, aucune étape supplémentaire n’est nécessaire — c’est le cas le plus fréquent en interne d’une organisation qui opère sa propre PKI.
  • Le client dispose d’une identité préexistante (par exemple un certificat installé en usine sur l’équipement, de type IDevID selon IEEE 802.1AR) et s’authentifie avec elle en mTLS dès le premier échange. Ce scénario, formalisé plus tard par BRSKI (RFC 8995), permet un provisionnement entièrement automatisé, dit zero-touch.
  • Une vérification manuelle est nécessaire : le client compare l’empreinte du certificat serveur présenté à une valeur communiquée hors bande, une seule fois, avant de faire confiance au canal pour tout enrôlement ultérieur.

Aucune de ces options n’est un détail d’implémentation : le choix fait à cette étape détermine si toute la chaîne de confiance qui suit repose sur quelque chose de vérifiable, ou sur une hypothèse non contrôlée.

Exemple : une séquence d’enrôlement en ligne de commande

Section intitulée « Exemple : une séquence d’enrôlement en ligne de commande »

La séquence suivante illustre les deux premières opérations avec curl et openssl, sur un serveur EST accessible en est.example.org.

Fenêtre de terminal
# 1. Récupérer les certificats de la CA (encapsulés en PKCS#7)
curl -s https://est.example.org/.well-known/est/cacerts \
-o cacerts.p7 --cacert bootstrap-ca.pem
# 2. Générer une paire de clés et une CSR pour le client
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-nodes -keyout client.key -out client.csr \
-subj "/CN=capteur-042.example.org"
# 3. Soumettre la CSR à /simpleenroll et récupérer le certificat émis
curl -s -X POST https://est.example.org/.well-known/est/simpleenroll \
-H "Content-Type: application/pkcs10" \
--data-binary @client.csr \
--cacert cacerts.p7 \
-o client-cert.p7

Le certificat obtenu (client-cert.p7) sert ensuite d’identité pour les échanges applicatifs du client, et pour s’authentifier lors d’un futur /simplereenroll.

SCEP (Simple Certificate Enrollment Protocol, formalisé plus tard en RFC 8894 informationnelle) est le protocole d’enrôlement le plus répandu avant EST, encore largement déployé sur des équipements réseau et des flottes mobiles. La comparaison éclaire ce qu’EST apporte :

  • Transport : SCEP encapsule ses messages dans son propre enveloppe cryptographique (PKCS#7) au-dessus de HTTP simple ; EST s’appuie sur TLS pour la confidentialité et l’intégrité du canal lui-même, et sur mTLS pour l’authentification du client en régime établi.
  • Authentification initiale : SCEP repose historiquement sur un secret partagé statique (le challenge password), souvent réutilisé plus longtemps qu’il ne le devrait ; EST peut s’appuyer sur une identité préexistante (IDevID) ou une vérification hors bande, ce qui réduit la dépendance à un secret unique.
  • Renouvellement : SCEP ne définit pas de flux de renouvellement propre ; EST le fait explicitement via simplereenroll.
  • Agilité cryptographique : les implémentations SCEP historiques figent souvent RSA et des algorithmes plus anciens ; EST hérite de l’agilité de TLS et de PKCS#10, sans contrainte d’algorithme propre au protocole.

EST ne remplace pas SCEP partout — un parc déjà construit autour de SCEP n’a pas de raison de migrer sans besoin précis — mais il constitue le choix par défaut plus solide pour tout nouveau déploiement d’enrôlement automatisé, et sert de socle à BRSKI pour le provisionnement zero-touch.

EST déplace une partie du risque de l’enrôlement de certificats plutôt que de le supprimer. Trois points à surveiller concrètement :

  • Le bootstrap reste le maillon faible. Un serveur EST mal configuré qui accepte n’importe quel client au premier contact, sans identité préexistante ni vérification hors bande, réduit toute la PKI qui suit à la solidité de cette seule étape.
  • serverkeygen doit rester l’exception. Chaque usage de cette opération doit être justifié par une contrainte matérielle réelle, pas par simplicité d’implémentation : c’est le seul point du protocole où une clé privée existe ailleurs que chez son propriétaire final.
  • Le renouvellement automatique doit être surveillé, pas seulement configuré. Un simplereenroll qui échoue silencieusement pendant des semaines aboutit à un certificat expiré découvert en production — EST automatise l’émission, pas la supervision de son bon déroulement.

EST couvre l’enrôlement et le renouvellement, pas l’ensemble du cycle de vie d’un certificat. Il ne définit pas de mécanisme de révocation propre — cela reste du ressort d’OCSP ou des listes de révocation, gérées côté PKI. Il suppose également qu’une autorité de certification et sa politique d’émission existent déjà : EST est un protocole de transport et d’échange, pas un outil de gouvernance de PKI. Voir PKI expliquée pour ce que ces briques amont recouvrent.

EST normalise l’enrôlement et le renouvellement de certificats X.509 sur un canal TLS, via un jeu réduit d’opérations (cacerts, simpleenroll, simplereenroll, serverkeygen, csrattrs). Le renouvellement s’appuie sur l’authentification mutuelle TLS avec le certificat déjà détenu, ce qui permet une rotation entièrement automatisée une fois l’enrôlement initial réussi. Le point qui mérite le plus d’attention reste le bootstrap : c’est lui qui détermine si la confiance accordée à un nouveau client repose sur quelque chose de vérifiable.