Client ACME Certbot
Un guide détaillé pour le déploiement complet d'un certificat SSL DV ACME sur un VPS Debian (Apache) avec renouvellement automatique via le timer Certbot par défaut. Le guide décrit le déploiement d'un certificat DV mono-domaine ou multi-domaine, par exemple example.com et www.example.com. Pour les déploiements standard, nous recommandons d'utiliser le répertoire Certbot standard /etc/letsencrypt. Ainsi, les renouvellements sont pris en charge par le timer système par défaut certbot.timer.
Ce guide ne couvre pas les certificats SSL WildCard, qui nécessitent une validation DNS et une API DNS pour le renouvellement automatique.
Contenu de l'article
- Concepts de base
- Apache, webroot
- Certbot, émission du certificat
- Plusieurs certificats sur un même serveur
- Plusieurs comptes EAB
Concepts de base
- ACME – Protocole pour l'émission et le renouvellement automatisés des certificats SSL/TLS.
- Certbot – Un client ACME qui communique avec l'autorité de certification et peut déployer un certificat vers Apache.
- kid + hmac – Identifiants External Account Binding (EAB) fournis par l'autorité de certification. Ils relient Certbot à un compte ou à un produit.
kid et hmac ne vérifient pas la propriété du domaine, ils lient le client ACME à un compte de la CA. Le domaine est vérifié séparément via le défi ACME. hmac est une valeur sensible — ne la partagez pas publiquement et ne la stockez pas dans des guides partagés. - http-01 – Validation du domaine via un fichier temporaire accessible à l'adresse HTTP du domaine.
- dns-01 – Validation via un enregistrement DNS TXT. Requis pour les certificats wildcard.
Dans les exemples, remplacez example.com par votre propre domaine.
Apache, webroot
Configuration de base d'Apache et du domaine sur le serveur.
›› Afficher/Masquer la sectionCréation d'un webroot distinct pour le domaine et d'une simple page de test. Apache sur Debian utilise par défaut l'utilisateur www-data.
apt update
apt install -y apache2
systemctl enable --now apache2
a2enmod rewrite headers ssl
systemctl reload apache2
| Commande | Ce qu'elle fait |
|---|---|
apt update |
Met à jour la liste des paquets depuis les dépôts Debian. |
apt install -y apache2 |
Installe le serveur web Apache. Le paramètre -y confirme automatiquement l'installation. |
systemctl enable --now apache2 |
Active Apache au démarrage du serveur et le lance immédiatement. |
a2enmod rewrite headers ssl |
Active les modules Apache courants pour les redirections, les en-têtes et le HTTPS. |
systemctl reload apache2 |
Recharge la configuration d'Apache sans redémarrage complet du service. |
Préparation du webroot
DOMAIN="example.com"
mkdir -p /var/www/$DOMAIN/public
chown -R www-data:www-data /var/www/$DOMAIN
chmod -R 755 /var/www/$DOMAIN
echo "OK $DOMAIN" > /var/www/$DOMAIN/public/index.html
Création d'un hôte virtuel Apache
cat > /etc/apache2/sites-available/$DOMAIN.conf <<EOF
<VirtualHost *:80>
ServerName $DOMAIN
ServerAlias www.$DOMAIN
DocumentRoot /var/www/$DOMAIN/public
<Directory /var/www/$DOMAIN/public>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog \${APACHE_LOG_DIR}/${DOMAIN}_error.log
CustomLog \${APACHE_LOG_DIR}/${DOMAIN}_access.log combined
</VirtualHost>
EOF
Activation du site Apache et vérification HTTP
Avant d'émettre le certificat, le domaine doit répondre via HTTP. Cela est requis pour la validation ACME http-01.
a2ensite $DOMAIN.conf
apache2ctl configtest
systemctl reload apache2
curl -I http://$DOMAIN
curl http://$DOMAIN
Installation de Certbot + émission d'un certificat
Installation de Certbot depuis les dépôts Debian. Le paquet python3-certbot-apache permet à Certbot de modifier la configuration d'Apache, d'effectuer la validation et de déployer le certificat émis.
apt install -y certbot python3-certbot-apache
certbot --version
Certbot prend en charge un large éventail de systèmes et de serveurs web. Nous recommandons de consulter les instructions Certbot pour la procédure spécifique à votre serveur web.
Enregistrement du compte ACME
Pour émettre un certificat, vous devez disposer d'un compte ACME auprès de l'autorité de certification. Dans ce guide, nous utiliserons des certificats ACME de la CA Certum.
Vous obtiendrez les identifiants EAB (kid + hmac) dans les détails de la commande.
certbot register \
--server https://acme.certum.pl/directory \
--email certum@example.com \
--agree-tos \
--eab-kid 'KID' \
--eab-hmac-key 'HMAC'
| Paramètre | Signification |
|---|---|
--server |
Indique le point de terminaison ACME spécifique. Sans ce paramètre, Certbot utiliserait le serveur ACME par défaut. CA DigiCert : https://one.digicert.com/mpki/api/v1/acme/v2/directory CA Sectigo : https://acme.sectigo.com/v2/DV |
--email |
E-mail de contact pour le compte ACME. |
--agree-tos |
Acceptation des conditions d'utilisation. |
--eab-kid |
Identifiant KID. |
--eab-hmac-key |
Clé secrète HMAC EAB. |
Émission d'un certificat ACME
certbot --apache \
--server https://acme.certum.pl/directory \
--cert-name $DOMAIN \
-d $DOMAIN \
-d www.$DOMAIN
Le paramètre --cert-name est particulièrement important lors de la gestion de plusieurs certificats sur un même serveur. Chaque certificat individuel doit avoir son propre nom unique.
Vérification du certificat et renouvellement automatique
certbot certificates
systemctl list-timers | grep certbot
certbot renew --dry-run
curl -I https://$DOMAIN
| Commande | Objectif |
|---|---|
certbot certificates |
Affiche les certificats gérés par Certbot. |
systemctl list-timers | grep certbot |
Vérifie que le timer de renouvellement automatique par défaut est en cours d'exécution. |
certbot renew --dry-run |
Simule le renouvellement du certificat sans remplacer le certificat de production. Sortie correcte : "all simulated renewals succeeded". |
curl -I https://$DOMAIN |
Vérifie la réponse HTTPS du domaine. |
Plusieurs certificats sur un même serveur
Certbot peut gérer plusieurs certificats dans le répertoire standard /etc/letsencrypt. Ce modèle est le plus simple pour les déploiements clients car il utilise le certbot.timer par défaut.
- Créez un vhost Apache distinct
Chaque domaine doit avoir son propre fichier dans /etc/apache2/sites-available/ et son propre webroot. - Émettez un certificat avec un --cert-name unique
N'utilisez pas le même nom de certificat pour un certificat individuel différent. - Vérifiez le renouvellement de tous les certificats
La commande certbot renew --dry-run doit réussir pour toutes les entrées de /etc/letsencrypt/renewal/.
Exemple de commande pour un domaine supplémentaire example.net :
DOMAIN="example.net"
mkdir -p /var/www/$DOMAIN/public
chown -R www-data:www-data /var/www/$DOMAIN
chmod -R 755 /var/www/$DOMAIN
echo "OK $DOMAIN" > /var/www/$DOMAIN/public/index.html
cat > /etc/apache2/sites-available/$DOMAIN.conf <<EOF
<VirtualHost *:80>
ServerName $DOMAIN
ServerAlias www.$DOMAIN
DocumentRoot /var/www/$DOMAIN/public
<Directory /var/www/$DOMAIN/public>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog \${APACHE_LOG_DIR}/${DOMAIN}_error.log
CustomLog \${APACHE_LOG_DIR}/${DOMAIN}_access.log combined
</VirtualHost>
EOF
a2ensite $DOMAIN.conf
apache2ctl configtest
systemctl reload apache2
curl -I http://$DOMAIN
certbot --apache \
--server https://acme.certum.pl/directory \
--cert-name $DOMAIN \
-d $DOMAIN
-d www.$DOMAIN
certbot renew --dry-run
Solution de contournement pour plusieurs comptes EAB
Auprès de l'autorité de certification, chaque produit peut avoir ses propres valeurs EAB. Si un compte ACME de la CA est déjà enregistré sur le serveur, un nouvel enregistrement pour le même serveur ACME peut entraîner une erreur :
There is an existing account; registration of a duplicate account with this command is currently unsupported.
Dans une telle situation, restez dans le répertoire standard /etc/letsencrypt, mais enregistrez le nouveau compte en utilisant la solution de contournement suivante. Après l'émission, utilisez le --account ACCOUNT_ID spécifique.
Déplacement temporaire des comptes existants
ACME_ACCOUNT_DIR="/etc/letsencrypt/accounts/acme.certum.pl/directory"
BACKUP_DIR="/root/certbot-certum-accounts-backup-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$BACKUP_DIR"
find "$ACME_ACCOUNT_DIR" -mindepth 1 -maxdepth 1 -type d -exec mv {} "$BACKUP_DIR"/ \;
Enregistrement d'un nouveau compte EAB
certbot register \
--server https://acme.certum.pl/directory \
--email certum@example.com \
--agree-tos \
--eab-kid 'KID' \
--eab-hmac-key 'HMAC'
Recherche de l'ID du nouveau compte
ls -1 "$ACME_ACCOUNT_DIR"
La sortie de cette commande est le nouvel ACCOUNT_ID. Utilisez cette valeur lors de l'émission du certificat.
Restauration des comptes d'origine
find "$BACKUP_DIR" -mindepth 1 -maxdepth 1 -type d -exec mv {} "$ACME_ACCOUNT_DIR"/ \;
Émission d'un certificat via un compte spécifique
certbot --apache \
--server https://acme.certum.pl/directory \
--account ACCOUNT_ID \
--cert-name example.net \
-d example.net \
-d www.example.net
| Pourquoi la solution de contournement est nécessaire | Ce qu'elle résout |
|---|---|
| Certbot refuse d'enregistrer un compte en double pour le même serveur ACME. | Le déplacement temporaire des comptes permet l'enregistrement d'un nouveau compte EAB. |
Le répertoire standard /etc/letsencrypt doit rester sur le serveur. |
Le certbot.timer par défaut renouvelle alors tous les certificats sans cron personnalisé. |
| Chaque produit de la CA peut avoir sa propre liaison EAB. | Le paramètre --account force le bon compte CA lors de l'émission. |
Liste de vérification
apache2ctl configtestrenvoieSyntax OK.curl -I http://example.comrépond via HTTP.curl -I https://example.comrépond via HTTPS.certbot certificatesaffiche le certificat attendu.certbot renew --dry-runréussit sans erreur.systemctl list-timers | grep certbotmontre uncertbot.timeractif.
Où aller ensuite ?
Retour à l'aide
Vous avez trouvé une erreur ou vous ne comprenez pas quelque chose ? Écrivez-nous !
