aslain.dev
0%
01 Hizmetler 02 Hakkımda 03 Projeler 04 Stack 05 Blog 06 İletişim
← Tüm makaleler Outils & DevOps

Certbot SSL : certificats automatiques avec Let's Encrypt

L'installation de Certbot SSL est le chemin le plus court vers un HTTPS gratuit et automatique sur un VPS. Certbot est le client officiel de Let's Encrypt : il obtient le certificat, modifie la configuration de votre serveur web et, surtout, renouvelle le certificat avant son expiration, tout seul. Dans ce guide, je détaille le fonctionnement de l'outil, quel plugin choisir et quand, la validation DNS pour les certificats joker, les deploy hooks, et comment rendre le renouvellement vraiment infaillible.

Comment fonctionne Certbot : challenges et plugins

Pour prouver à Let's Encrypt que le domaine est bien sous votre contrôle, Certbot résout un challenge. Il existe deux types courants : la validation HTTP-01 sert un fichier temporaire sur le port 80, tandis que la validation DNS-01 ajoute un enregistrement TXT temporaire à votre domaine. Les domaines uniques utilisent généralement HTTP-01, alors que les certificats joker (*.exemple.com) exigent DNS-01.

Certbot procède via des plugins. Il en existe deux types : un authenticator (qui réalise la validation — par ex. nginx, apache, webroot, standalone) et un installer (qui place le certificat dans votre configuration — par ex. nginx, apache). Les plugins nginx et apache jouent les deux rôles, ce qui en fait la voie la plus simple.

Installation de Certbot

L'installation recommandée est le paquet snap ; il fournit toujours la dernière version et configure automatiquement le timer de renouvellement. Sur Ubuntu/Debian :

sudo apt update
sudo apt install snapd -y
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Si vous préférez éviter snap, installez depuis les dépôts de votre distribution : sudo apt install certbot python3-certbot-nginx (ou python3-certbot-apache pour Apache). La version peut être un peu plus ancienne mais fonctionne. Vérifiez avec certbot --version.

La voie la plus simple : le plugin nginx/apache

Sur un serveur où Nginx tourne déjà, une seule commande obtient le certificat et ajoute le bloc HTTPS à votre configuration :

sudo certbot --nginx -d exemple.com -d www.exemple.com

Au premier lancement, Certbot demande une adresse e-mail (pour les alertes de renouvellement) et l'acceptation des conditions d'utilisation. Il demande ensuite s'il faut rediriger HTTP vers HTTPS — choisissez « Redirect ». La logique est identique pour Apache, seul le plugin change :

sudo certbot --apache -d exemple.com -d www.exemple.com

Sur Apache, Certbot active mod_ssl et mod_rewrite, crée un fichier d'hôte virtuel SSL et ajoute la règle de redirection. Sur Nginx, une fois terminé, testez et rechargez la configuration avec sudo nginx -t && sudo systemctl reload nginx.

certonly et webroot : un certificat sans toucher à votre configuration

Parfois, vous ne voulez pas que Certbot modifie les fichiers de votre serveur web — la configuration est complexe, ou vous êtes derrière un reverse proxy. Dans ce cas, la sous-commande certonly obtient uniquement le certificat et vous laisse l'installation. L'authenticator le plus sûr est webroot, car il écrit les fichiers de validation dans votre racine de documents existante sans arrêter le serveur en cours d'exécution :

sudo certbot certonly --webroot \
  -w /var/www/exemple \
  -d exemple.com -d www.exemple.com

Ici, -w pointe vers la racine de documents de votre site ; Certbot dépose les fichiers de validation sous /.well-known/acme-challenge/. S'il n'y a pas encore de serveur web (le port 80 est libre), vous pouvez utiliser le plugin standalone, qui lance son propre serveur temporaire le temps du challenge :

sudo certbot certonly --standalone -d exemple.com

Les fichiers obtenus se trouvent sous /etc/letsencrypt/live/exemple.com/ : fullchain.pem (certificat + chaîne intermédiaire) et privkey.pem (clé privée). Dans votre configuration Nginx, vous pointez les directives ssl_certificate et ssl_certificate_key vers ces deux chemins.

Certificats joker : la validation DNS-01

Pour couvrir chaque sous-domaine sous *.exemple.com avec un seul certificat, il vous faut un certificat joker (wildcard), et Let's Encrypt ne les délivre que via DNS-01. La forme la plus simple est la validation manuelle :

sudo certbot certonly --manual \
  --preferred-challenges dns \
  -d "*.exemple.com" -d "exemple.com"

Certbot vous remet un enregistrement TXT (_acme-challenge.exemple.com) ; vous l'ajoutez dans votre panneau DNS, attendez sa propagation, puis continuez. Comme l'approche manuelle vous oblige à intervenir à chaque renouvellement, en production il est bien plus pratique d'utiliser le plugin officiel de votre fournisseur DNS. Pour Cloudflare, par exemple, avec un token API :

sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials ~/.secrets/cloudflare.ini \
  -d "*.exemple.com" -d "exemple.com"

Ainsi, l'enregistrement TXT est créé et supprimé automatiquement, et le renouvellement du certificat joker devient totalement automatique.

Renouvellement automatique et deploy hooks

Les certificats Let's Encrypt sont valables 90 jours, donc la tâche la plus précieuse de Certbot est le renouvellement. L'installation snap ou paquet configure un systemd timer (ou une tâche cron) qui s'exécute deux fois par jour et renouvelle dès que le certificat entre dans ses 30 derniers jours. Vérifiez qu'il est actif :

systemctl list-timers | grep certbot

Pour tester que le renouvellement fonctionnera sans renouveler réellement, un essai à blanc est indispensable :

sudo certbot renew --dry-run

Si cette commande se termine sans erreur, le renouvellement est sûr. Un point clé : après le renouvellement, le serveur web doit charger le nouveau certificat en mémoire. Les plugins nginx/apache le font d'eux-mêmes, mais si vous avez installé manuellement avec certonly, définissez un deploy hook :

sudo certbot certonly --webroot -w /var/www/exemple \
  -d exemple.com \
  --deploy-hook "systemctl reload nginx"

Le deploy hook ne s'exécute que lorsque le certificat a réellement été renouvelé, il ne recharge donc pas le service inutilement. Les paramètres de renouvellement d'un certificat existant se trouvent dans /etc/letsencrypt/renewal/exemple.com.conf ; vous pouvez y ajouter le deploy hook à la main également.

Erreurs fréquentes

  • Échec de validation (timeout) : généralement, le DNS ne pointe pas encore vers votre serveur, ou les ports 80/443 sont fermés. Vérifiez l'IP avec dig +short exemple.com et les ports dans votre pare-feu.
  • Rate limit : Let's Encrypt applique des limites hebdomadaires. Pendant les réglages, utilisez --dry-run ou l'environnement --staging ; aucun ne consomme la limite réelle.
  • « too many redirects » : si Certbot et un CDN (par ex. Cloudflare « Flexible SSL ») redirigent tous les deux, vous obtenez une boucle. Réglez le mode SSL du CDN sur « Full (strict) ».
  • Renouvellement qui échoue silencieusement : exécutez régulièrement certbot renew --dry-run ; si le chemin webroot a changé ou qu'un hook est cassé, cela apparaît ici.

Questions fréquentes

Quelle est la différence entre Certbot et Let's Encrypt ?

Let's Encrypt est l'autorité de certification (CA) gratuite qui délivre le certificat. Certbot est le logiciel client qui dialogue avec cette CA via le protocole ACME : il effectue la validation, télécharge le certificat et le renouvelle. D'autres clients comme acme.sh font le même travail en dehors de Certbot.

Combien de domaines peut-on mettre sur un certificat ?

En passant plusieurs options -d dans la même commande, vous pouvez ajouter plusieurs domaines (SAN) à un seul certificat ; Let's Encrypt en supporte jusqu'à 100 par certificat. Si vous avez de nombreux sous-domaines, un certificat joker est généralement une solution plus propre.

Que faire si je dois révoquer un certificat ?

Si la clé privée fuite, révoquez-le avec sudo certbot revoke --cert-name exemple.com, puis nettoyez la config de renouvellement avec certbot delete. En usage normal, aucune révocation n'est nécessaire ; les certificats expirés perdent simplement leur validité d'eux-mêmes.

Vous voulez installer Certbot SSL de zéro sur votre serveur ? Je peux gérer tout le processus pour vous — choix du plugin, certificats joker, deploy hooks et renouvellement sans interruption. Contactez-moi.

Bu kategorideki tüm yazılar →

Devamı için