Certificat SSL gratuit avec Let's Encrypt (Certbot)
Le petit cadenas dans la barre d’adresse n’est plus une option : sans HTTPS, les navigateurs affichent un avertissement « Non sécurisé », le référencement en pâtit et les données transitent en clair. La bonne nouvelle, c’est que chiffrer son site ne coûte plus rien. Let’s Encrypt, autorité de certification gratuite et automatisée, délivre des certificats SSL/TLS reconnus par tous les navigateurs, et Certbot en automatise l’obtention comme le renouvellement. Ce guide couvre l’installation, la génération d’un certificat, son renouvellement automatique, le cas des certificats wildcard et le dépannage des erreurs courantes.
Pourquoi HTTPS est indispensable
HTTPS chiffre les échanges entre le navigateur du visiteur et votre serveur. Trois raisons le rendent incontournable :
- Confidentialité et intégrité : mots de passe, formulaires, cookies ne peuvent plus être interceptés ni modifiés en transit.
- Confiance : sans certificat valide, Chrome et Firefox barrent l’accès d’un écran d’avertissement dissuasif.
- SEO et fonctionnalités : Google privilégie les sites en HTTPS, et de nombreuses API navigateur (géolocalisation, service workers, HTTP/2) l’exigent purement et simplement.
Un certificat repose sur une paire de clés : une clé privée, qui reste secrète sur votre serveur, et un certificat public signé par l’autorité, que le navigateur vérifie. Let’s Encrypt automatise cette signature via le protocole ACME, qui prouve que vous contrôlez bien le domaine.
Installer Certbot
Certbot est le client ACME officiel. Sur Debian ou Ubuntu, la méthode recommandée passe par snap, qui fournit toujours la dernière version :
# Installer Certbot via snap
sudo snap install --classic certbot
# Créer un lien pour l'exécuter simplement
sudo ln -s /snap/bin/certbot /usr/bin/certbot
L’installation via apt reste possible et suffisante dans la plupart des cas :
sudo apt update && sudo apt install certbot python3-certbot-nginx
Le paquet python3-certbot-nginx ajoute le plugin Nginx, capable de modifier automatiquement votre configuration. Il existe un équivalent python3-certbot-apache pour Apache.
Générer son premier certificat
C’est l’étape magique. Si vous utilisez Nginx (voyez notre guide sur le reverse proxy avec Nginx pour la configuration en amont), une seule commande suffit :
# Certbot détecte les domaines de la config Nginx et configure le HTTPS
sudo certbot --nginx
Certbot vous demande votre adresse e-mail (pour les alertes d’expiration), la liste des domaines à sécuriser, puis modifie lui-même vos blocs server : il ajoute l’écoute sur le port 443, le chemin des certificats et la redirection automatique de HTTP vers HTTPS. En moins d’une minute, votre site est chiffré.
Pour ne récupérer que le certificat sans toucher à la configuration (utile si vous gérez Nginx à la main), utilisez le mode certonly :
# Générer le certificat sans modifier la configuration du serveur web
sudo certbot certonly --nginx -d mondomaine.fr -d www.mondomaine.fr
Les fichiers sont alors déposés dans /etc/letsencrypt/live/mondomaine.fr/ : fullchain.pem (le certificat) et privkey.pem (la clé privée). Il ne reste qu’à les référencer dans votre configuration :
server {
listen 443 ssl;
server_name mondomaine.fr;
ssl_certificate /etc/letsencrypt/live/mondomaine.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mondomaine.fr/privkey.pem;
# ... reste de la configuration
}
Le renouvellement automatique
Particularité de Let’s Encrypt : ses certificats ne sont valides que 90 jours. Un choix délibéré qui pousse à l’automatisation. Certbot installe pour cela un timer systemd qui vérifie deux fois par jour si un renouvellement est nécessaire.
Vérifiez que tout est en place :
# Simuler un renouvellement sans rien modifier (test à blanc)
sudo certbot renew --dry-run
# Consulter le timer chargé de la tâche
sudo systemctl list-timers | grep certbot
Si le test à blanc réussit, vous n’avez plus rien à faire : le certificat se renouvellera seul, et Nginx sera rechargé automatiquement pour prendre en compte le nouveau. C’est tout l’intérêt de Certbot.
Ne renouvelez pas trop tôt, ni trop souvent — Certbot ne renouvelle un certificat que s’il expire dans moins de 30 jours. Inutile de forcer : Let’s Encrypt applique des limites de débit (rate limits) strictes, notamment 5 certificats identiques par semaine. En phase de test, utilisez toujours l’environnement de préproduction avec l’option
--stagingpour ne pas les épuiser.
Le certificat wildcard
Un certificat classique couvre les domaines que vous listez explicitement. Un certificat wildcard (*.mondomaine.fr) couvre d’un coup tous les sous-domaines : api.mondomaine.fr, blog.mondomaine.fr, etc. Pratique lorsqu’on en crée beaucoup.
Contrainte : le wildcard exige une validation par DNS (et non par HTTP). Vous devez prouver le contrôle du domaine en ajoutant un enregistrement TXT :
# Demander un certificat wildcard via validation DNS manuelle
sudo certbot certonly --manual --preferred-challenges dns \
-d mondomaine.fr -d "*.mondomaine.fr"
Certbot affiche alors une valeur à placer dans un enregistrement _acme-challenge TXT chez votre hébergeur DNS. Pour automatiser le renouvellement d’un wildcard, il faut un plugin DNS correspondant à votre fournisseur (Cloudflare, OVH, Gandi…), par exemple :
sudo apt install python3-certbot-dns-cloudflare
sudo certbot certonly --dns-cloudflare \
--dns-cloudflare-credentials ~/.secrets/cloudflare.ini \
-d "*.mondomaine.fr"
Sans plugin DNS, le renouvellement d’un wildcard reste manuel — un point à garder en tête avant de le choisir.
Dépannage des erreurs courantes
« Challenge failed » / erreur de validation HTTP — Certbot doit joindre votre serveur sur le port 80 depuis l’extérieur. Vérifiez que le domaine pointe bien vers votre serveur (dig mondomaine.fr) et que le pare-feu laisse passer les ports 80 et 443 :
sudo ufw allow 'Nginx Full'
« Too many certificates already issued » — Vous avez atteint la limite de débit hebdomadaire. Attendez, ou testez d’abord avec --staging.
Le certificat n’est pas pris en compte après renouvellement — Le serveur web n’a pas été rechargé. Ajoutez un hook de rechargement :
sudo certbot renew --deploy-hook "systemctl reload nginx"
Vérifier la date d’expiration et le contenu d’un certificat :
# Lister tous les certificats gérés par Certbot et leur échéance
sudo certbot certificates
# Inspecter directement le certificat avec OpenSSL
openssl x509 -in /etc/letsencrypt/live/mondomaine.fr/fullchain.pem -noout -dates
Conclusion
Let’s Encrypt et Certbot ont démocratisé le HTTPS : ce qui était autrefois payant et fastidieux tient désormais en une commande, avec un renouvellement entièrement automatique. Générez votre certificat, vérifiez le renouvellement à blanc, et surveillez de temps à autre les dates d’expiration. Votre site gagne en sécurité, en confiance et en visibilité — sans dépenser un centime.