SSL/TLS et certbot
HTTPS est aujourd'hui la norme, y compris sur les services internes. Un certificat TLS valide est la condition préalable à toute communication chiffrée. Let's Encrypt + certbot rend l'obtention et le renouvellement automatique de certificats gratuits accessibles en quelques commandes.
Concepts
- TLS (Transport Layer Security) : protocole de chiffrement des communications. HTTPS = HTTP sur TLS.
- Certificat : fichier signé par une autorité de certification (CA) qui prouve l'identité du serveur et contient sa clé publique.
- Let's Encrypt : CA publique gratuite et automatisée. Émet des certificats valides 90 jours, renouvelables automatiquement.
- certbot : client officiel Let's Encrypt pour Linux.
Inspecter un certificat : openssl
# Inspecter un certificat local
openssl x509 -in /etc/ssl/certs/mon-cert.crt -text -noout
# Dates de validité uniquement
openssl x509 -in /etc/ssl/certs/mon-cert.crt -noout -dates
# Tester la connexion TLS d'un serveur distant
openssl s_client -connect exemple.fr:443
# Voir le certificat présenté par un serveur (dates + sujet)
echo | openssl s_client -connect exemple.fr:443 2>/dev/null | openssl x509 -noout -subject -datescertbot : obtenir un certificat Let's Encrypt
Installation
apt install certbotMode standalone
certbot ouvre temporairement un serveur HTTP sur le port 80 pour la validation. Le service web doit être arrêté.
systemctl stop nginx
certbot certonly --standalone -d exemple.fr -d www.exemple.fr
systemctl start nginxMode webroot
certbot dépose un fichier de validation dans le répertoire web sans couper le service :
certbot certonly --webroot -w /var/www/html -d exemple.frPlugin Nginx (recommandé)
apt install python3-certbot-nginx
certbot --nginx -d exemple.fr -d www.exemple.frLe plugin configure automatiquement Nginx pour HTTPS et la redirection HTTP vers HTTPS.
Emplacement des certificats
/etc/letsencrypt/live/exemple.fr/fullchain.pem # certificat + chaîne CA
/etc/letsencrypt/live/exemple.fr/privkey.pem # clé privéeDans la configuration Nginx :
ssl_certificate /etc/letsencrypt/live/exemple.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemple.fr/privkey.pem;Renouvellement automatique
certbot installe un timer systemd lors de l'installation. Vérifier qu'il est actif :
systemctl status certbot.timer
certbot renew --dry-run # tester le renouvellement sans l'appliquerLe renouvellement est déclenché automatiquement quand le certificat a moins de 30 jours de validité restante. Les certificats Let's Encrypt expirent après 90 jours.
certbot certificates # lister les certificats gérés et leurs datesEn pratique
Avant d'exposer un service en HTTPS, vérifier trois points : le certificat est valide (openssl s_client -connect domaine:443 affiche Verify return code: 0), le renouvellement automatique est en place (systemctl status certbot.timer), et la redirection HTTP vers HTTPS est configurée. Un certificat expiré est souvent plus visible qu'une indisponibilité : les navigateurs bloquent l'accès avec un avertissement explicite. Surveiller les dates avec certbot certificates et configurer une alerte cron si nécessaire.