HTTP-01 ou DNS-01 : obtenir un certificat TLS avec certbot
Pour délivrer un certificat TLS, Let’s Encrypt vérifie que l’on contrôle bien le domaine. Deux défis sont courants : HTTP-01 et DNS-01. Le choix dépend de ce dont on a besoin : wildcard, ports ouverts, automatisation.
HTTP-01
Let’s Encrypt demande un fichier précis à l’adresse http://domaine/.well-known/acme-challenge/jeton. Certbot le dépose avec --webroot (un site déjà servi) ou en démarrant son propre serveur temporaire avec --standalone.
Contraintes : le port 80 doit être joignable depuis Internet, et ce défi ne permet pas de certificat wildcard.
DNS-01
Le défi consiste à publier un enregistrement TXT _acme-challenge.domaine contenant une valeur fournie par Let’s Encrypt. Aucun port à ouvrir, le serveur n’a même pas besoin d’être exposé, et le wildcard est possible.
Contrepartie : il faut pouvoir modifier la zone DNS, idéalement par une API pour automatiser le renouvellement. Les identifiants de cette API sont sensibles et doivent avoir des droits aussi limités que possible.
En résumé
- Port 80 ouvert
- HTTP-01 : oui. DNS-01 : non
- Wildcard
- HTTP-01 : non. DNS-01 : oui
- Accès requis
- HTTP-01 : le serveur web. DNS-01 : la zone DNS
- Serveur exposé
- HTTP-01 : obligatoire. DNS-01 : inutile
Les commandes
# HTTP-01 : un site déjà servi sur le port 80
certbot certonly --webroot -w /var/www/html -d exemple.fr -d www.exemple.fr
# DNS-01 : certificat wildcard avec le plugin DNS d'OVH
certbot certonly --dns-ovh --dns-ovh-credentials ~/.secrets/certbot/ovh.ini \
-d exemple.fr -d "*.exemple.fr"
# Tester sans consommer les limites de Let's Encrypt
certbot certonly --dry-run --webroot -w /var/www/html -d exemple.fr
Points d’attention
- Un certificat
*.exemple.frne couvre pasexemple.frlui-même : il faut demander les deux noms. - Le mode
--manualne se renouvelle pas tout seul : pour automatiser, utiliser un plugin DNS ou un hook d’authentification. - On peut déléguer
_acme-challengepar un CNAME vers une zone dédiée, pour que les identifiants automatisés ne puissent modifier que cette zone. - Le fichier d’identifiants du plugin doit être lisible uniquement par son propriétaire (
chmod 600).
Voir aussi : les labs réseau, où ces deux défis ont été pratiqués, hardening d’un serveur Debian