Fonctionnement du protocole ACME
Guide de lecture
|
Cet article est la partie 1 de notre série “ACME”. Pour une navigation aisée au sein de cet article, une table des matières est disponible sur le côté droit. |
Une explication détaillée du fonctionnement du protocole ACME
Le protocole ACME (Automated Certificate Management Environment - Environnement de Gestion Automatisée de Certificats) est un protocole standard ouvert qui permet d’automatiser les interactions entre les autorités de certification (AC ou CA en anglais) et les serveurs web (ou tout autre client nécessitant un certificat). Son objectif principal est de rendre l’obtention, le renouvellement et la révocation des certificats X.509 (SSL/TLS) plus simples, plus rapides et plus fiables, éliminant ainsi une grande partie du travail manuel traditionnellement requis. Let’s Encrypt est l’exemple le plus connu d’autorité de certification utilisant ACME.
Pourquoi ACME ?
Avant ACME, l’obtention et le renouvellement de certificats SSL/TLS étaient souvent des processus manuels : génération d’une demande de signature de certificat (CSR), soumission à une AC, validation de la propriété du domaine (souvent par email ou en plaçant un fichier spécifique sur le serveur), et enfin installation du certificat. Ce processus était non seulement chronophage mais aussi source d’erreurs, pouvant conduire à des expirations de certificats et à des interruptions de service.
ACME vise à résoudre ces problèmes en automatisant chaque étape.
Les Acteurs du Protocole ACME
Deux acteurs principaux interagissent dans le protocole ACME :
1. Le Client ACME :
C’est un logiciel qui s’exécute sur le serveur (ou l’appareil) de l’utilisateur qui souhaite obtenir un certificat. Il communique avec le serveur ACME pour demander, renouveler ou révoquer des certificats.
Des exemples de clients ACME populaires incluent Certbot, acme.sh, et des intégrations natives dans des serveurs web comme Caddy.
2. Le Serveur ACME (Autorité de Certification) :
C’est le système exploité par l’autorité de certification (par exemple, Let’s Encrypt). Il répond aux requêtes du client ACME, vérifie la propriété du domaine et émet les certificats.
Fonctionnement Général du Protocole ACME
Le processus ACME se déroule en plusieurs étapes clés :
1. Création de Compte et Enregistrement
- Avant de pouvoir demander des certificats, le client ACME doit s’enregistrer auprès du serveur ACME.
- Le client génère une paire de clés (publique et privée) pour son compte.
- Il envoie sa clé publique au serveur ACME.
- Le serveur ACME crée un compte associé à cette clé publique.
Toutes les communications ultérieures du client devront être signées avec la clé privée correspondante, prouvant ainsi son identité.
2. Demande de Certificat (Commande)
Une fois le compte créé, le client peut initier une “commande” pour un certificat. Cette commande spécifie les noms de domaine (identifiants) pour lesquels le certificat doit être émis (par exemple, exemple.com
et www.exemple.com
).
3. Défis de Validation de Domaine
C’est l’étape cruciale. Pour s’assurer que le client contrôle réellement les domaines pour lesquels il demande un certificat, le serveur ACME lui propose un ou plusieurs “défis” (challenges).
Le client doit prouver son contrôle en relevant l’un de ces défis pour chaque domaine listé dans la commande.
Il existe plusieurs types de défis, les plus courants étant :
- HTTP-01 : Le client doit héberger un fichier spécifique (contenant un jeton fourni par le serveur ACME) à une URL bien définie sur le serveur
HTTP
du domaine concerné. Le serveur ACME tentera alors de récupérer ce fichier via une requêteHTTP
. - DNS-01 : Le client doit créer un enregistrement
DNS
spécifique (généralement un enregistrementTXT
) contenant une valeur dérivée d’un jeton fourni par le serveur ACME. Le serveur ACME effectuera alors une requêteDNS
pour vérifier cet enregistrement. - TLS-ALPN-01 : Le client configure son serveur TLS pour qu’il présente un certificat TLS spécifique (auto-signé, contenant une extension spéciale avec le jeton) lorsqu’une connexion est initiée avec une indication
ALPN
(Application-Layer Protocol Negotiation) particulière. Le serveur ACME tentera d’établir une connexionTLS
pour vérifier cela.
4. Préparation et Réponse aux Défis
Le client ACME choisit l’un des types de défis proposés et effectue les actions nécessaires pour le préparer.
Par exemple,
- pour un défi HTTP-01, il crée le fichier requis sur son serveur web.
- Pour un défi DNS-01, il interagit avec l’
API
de son fournisseurDNS
pour créer l’enregistrementTXT
.
5. Notification au Serveur ACME
Une fois le défi préparé, le client notifie le serveur ACME qu’il est prêt pour la validation.
6. Vérification du Défi par le Serveur ACME
Le serveur ACME tente de vérifier que le client a correctement configuré le défi.
- Pour HTTP-01 : Il effectue une requête
HTTP
vershttp://<domaine>/.well-known/acme-challenge/<jeton>
. - Pour DNS-01 : Il interroge les serveurs
DNS
pour l’enregistrement TXT _acme-challenge.`. - Pour TLS-ALPN-01 : Il initie une connexion
TLS
sur le port443
vers le domaine avec l’ALPN acme-tls/1
.
7. Statut de Validation
Si le serveur ACME parvient à vérifier le défi, le domaine est considéré comme validé.
8. Envoi de la Demande de Signature de Certificat (CSR)
Après avoir validé tous les domaines de la commande, le client ACME génère une paire de clés pour le certificat lui-même (différente de la clé de compte). Il crée ensuite une Demande de Signature de Certificat (CSR). Le CSR contient la clé publique du certificat, les noms de domaine et d’autres informations. Le client signe ce CSR avec la clé privée du certificat et l’envoie au serveur ACME. La requête finale est également signée avec la clé privée du compte ACME.
9. Émission et Envoi du Certificat
Le serveur ACME vérifie la signature du CSR. S’il est valide et que tous les domaines sont autorisés, il signe le certificat avec sa propre clé privée (celle de l’AC) et le renvoie au client ACME. L’AC peut également renvoyer des certificats intermédiaires nécessaires pour former une chaîne de confiance complète.
10. Installation du Certificat
Le client ACME reçoit le certificat signé et la chaîne de certificats, puis les installe sur le serveur web ou l’application concernée.
Les Différents Types de Défis en Détail
Défi HTTP-01
Ce défi prouve que vous contrôlez le serveur web hébergeant le domaine.
- Avantages : Facile à automatiser pour les serveurs web standards. Ne nécessite pas d’accès à la configuration
DNS
. - Inconvénients : Nécessite que le serveur soit accessible sur le port
80
depuis Internet. Ne peut pas être utilisé pour les certificats wildcard (joker, par exemple*.exemple.com
).
Défi DNS-01
Ce défi prouve que vous contrôlez la zone DNS
du domaine.
- Avantages : Permet d’obtenir des certificats wildcard. Ne nécessite pas que le serveur soit directement accessible depuis Internet (utile pour les serveurs en réseau privé).
- Inconvénients : Nécessite un accès programmatique à la configuration DNS du domaine, ce qui peut être plus complexe à mettre en place. La propagation DNS peut introduire des délais.
Défi TLS-ALPN-01
Ce défi utilise l’extension ALPN (Application-Layer Protocol Negotiation) de TLS.
- Avantages : Peut être utilisé si le port
80
n’est pas disponible. La validation se fait au niveauTLS
. - Inconvénients : Nécessite un contrôle sur la configuration
TLS
du serveur. N’est pas aussi largement supporté ou utilisé que HTTP-01 ou DNS-01. Ne peut pas être utilisé pour les certificats wildcard.
Renouvellement et Révocation
Renouvellement
Les certificats émis via ACME ont généralement une durée de vie courte (par exemple, 90 jours pour Let’s Encrypt). C’est une bonne pratique de sécurité, car cela limite la fenêtre d’exposition en cas de compromission d’une clé privée. Le protocole ACME est conçu pour automatiser également le renouvellement. Le client ACME peut être configuré pour vérifier régulièrement la date d’expiration des certificats et initier automatiquement le processus de renouvellement (qui suit les mêmes étapes que la demande initiale) bien avant l’expiration.
Révocation
Si la clé privée d’un certificat est compromise, ou si le certificat n’est plus nécessaire, il doit être révoqué. Le client ACME peut envoyer une requête de révocation signée au serveur ACME. Pour révoquer un certificat, le client doit prouver qu’il est autorisé à le faire, soit en signant la requête avec la clé privée du compte ACME qui a demandé le certificat, soit avec la clé privée du certificat lui-même.
Conclusion
Le protocole ACME a révolutionné la manière dont les certificats SSL/TLS sont gérés, en rendant l’ensemble du cycle de vie (émission, renouvellement, révocation) automatisable. Il a grandement contribué à l’adoption généralisée du HTTPS en abaissant les barrières techniques et financières. Grâce à ACME, sécuriser un site web avec HTTPS
est devenu accessible à tous, de manière simple et standardisée. Comprendre son fonctionnement permet de mieux appréhender les mécanismes qui assurent la confiance et la sécurité sur le Web moderne.