Activer HTTPS avec Certbot

2 min de lecture07 novembre 2026

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 :

Bash
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

Bash
sudo apt update
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d votre-domaine.fr -d www.votre-domaine.fr

Le 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

Bash
sudo systemctl list-timers certbot.timer
sudo certbot renew --dry-run

Le 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 :

Bash
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 -dates

Si 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 :

Nginx
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 bloc server prioritaire.
  • 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