SSLmentor

Certificats TLS/SSL de qualité pour sites Web et projets Internet.

Certbot

Certbot

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.

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 section

Cré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 configtest renvoie Syntax OK.
  • curl -I http://example.com répond via HTTP.
  • curl -I https://example.com répond via HTTPS.
  • certbot certificates affiche le certificat attendu.
  • certbot renew --dry-run réussit sans erreur.
  • systemctl list-timers | grep certbot montre un certbot.timer actif.

Retour à l'aide
Vous avez trouvé une erreur ou vous ne comprenez pas quelque chose ? Écrivez-nous !

CA Sectigo
CA RapidSSL
CA Thawte
CA GeoTrust
CA DigiCert
CA Certum