Activer HTTPS avec Certbot
HTTPS chiffre le trafic entre le navigateur et le serveur et évite les avertissements des navigateurs modernes. Let's Encrypt délivre des certificats gratuits, valables quatre-vingt-dix jours, que Certbot obtient et renouvelle. La difficulté n'est pas la commande, mais la préparation DNS et les ports : un seul enregistrement oublié fait échouer la validation.
Préparer le DNS et Nginx
Avant Certbot, votre-domaine.fr et www.votre-domaine.fr doivent résoudre vers le VPS en A et AAAA, et Nginx doit répondre sur le port 80 avec un server_name correct. Ouvrez les ports :
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
curl -I http://votre-domaine.fr/Un AAAA erroné fait échouer le défi HTTP-01 : Let's Encrypt essaie l'IPv6 en premier. Corrigez le DNS et attendez le TTL avant de relancer. Si un autre bloc server capte le domaine, Certbot écrit le certificat au mauvais endroit.
Obtenir le certificat
sudo apt update
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d votre-domaine.fr -d www.votre-domaine.frLe plugin Nginx modifie le bloc pour écouter en 443, ajoute les chemins de certificat et propose la redirection HTTP vers HTTPS. Les fichiers sont dans /etc/letsencrypt/live/votre-domaine.fr/. Ne les copiez pas à la main : Certbot gère les liens et les renouvellements.
Renouvellement et test
sudo systemctl list-timers certbot.timer
sudo certbot renew --dry-runLe timer systemd remplace les anciens scripts cron. --dry-run teste le renouvellement sans consommer de quota. Après un renouvellement, le plugin recharge Nginx. Vérifiez le certificat réellement servi :
curl -I https://votre-domaine.fr/
openssl s_client -connect votre-domaine.fr:443 -servername votre-domaine.fr </dev/null 2>/dev/null | openssl x509 -noout -datesSi le renouvellement échoue, gardez le port 80 ouvert : le défi HTTP-01 en a besoin. Les journaux se trouvent dans /var/log/letsencrypt/letsencrypt.log.
HSTS, avec prudence
Activez HSTS seulement quand tout le domaine et ses sous-domaines fonctionnent en HTTPS :
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;Commencez par max-age=300, vérifiez, puis augmentez. includeSubDomains casse un sous-domaine resté en HTTP ; preload est difficile à retirer. Testez avec sudo nginx -t et rechargez.
Dépannage
Challenge failed: DNS, AAAA incorrect, port 80 fermé ou blocserverprioritaire.Too many requests: limite de Let's Encrypt ; attendez avant de réessayer, ne bouclez pas.Certificate not yet due for renewal: normal, le renouvellement se fait à trente jours de l'expiration.- Navigateur encore en HTTP : vérifiez la redirection et le cache, puis testez depuis un autre réseau.
Ne modifiez pas les protocoles TLS à l'aveugle : la configuration générée par Certbot est un bon point de départ pour Nginx.
Publicité
Cet article vous a-t-il aidé ?
À lire aussi
- Garder une application Node.js en ligne avec PM2Faire tourner une application Node.js sous PM2, la relancer au démarrage et lire ses journaux.
- Installer PHP-FPM pour un siteRelier Nginx à PHP 8.4-FPM par socket Unix, avec les bonnes permissions et une page de test.
- Déployer une stack avec Docker ComposeDéployer une application et sa base avec compose.yaml, des volumes persistants et des variables hors Git.