Renouvellement Let's Encrypt
Les certificats Let's Encrypt sont valides 90 jours. Sur un VPS Linux HolyCloud configuré avec Certbot, le renouvellement est en principe automatique via systemd ou cron. Ce guide explique comment vérifier, tester et corriger les échecs de renouvellement.
Prérequis
- VPS HolyCloud avec Certbot déjà installé (voir le tutoriel Nginx + Certbot)
- Certificats obtenus en mode webroot ou nginx
- Nom de domaine toujours pointé vers l'IP du VPS
- Ports 80 et 443 accessibles depuis Internet
Comprendre le cycle de vie
| Élément | Détail |
|---|---|
| -------- | -------- |
| Durée | 90 jours |
| Renouvellement recommandé | 30 jours avant expiration |
| Planification | Timer systemd certbot.timer ou cron |
Listez vos certificats :
sudo certbot certificates
Notez les dates Expiry Date et le chemin Certificate Path (souvent /etc/letsencrypt/live/votredomaine.fr/).
Étape 1 : vérifier le timer systemd
Sur Ubuntu/Debian récents :
systemctl list-timers | grep certbot
sudo systemctl status certbot.timer
Activez-le si nécessaire :
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
Prochaine exécution :
systemctl list-timers certbot.timer
Étape 2 : test de renouvellement à sec
Simulez le renouvellement sans modifier les certificats en production :
sudo certbot renew --dry-run
Résultat attendu : Congratulations, all simulated renewals succeeded.
En cas d'échec, lisez le log :
sudo tail -100 /var/log/letsencrypt/letsencrypt.log
Étape 3 : renouvellement manuel (si besoin)
Si le timer a échoué ou avant une maintenance :
sudo certbot renew
sudo systemctl reload nginx
Avec Apache :
sudo certbot renew
sudo systemctl reload apache2
Hook post-renouvellement (recharge automatique Nginx) — fichier /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh :
#!/bin/bash
systemctl reload nginx
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
Étape 4 : surveillance de l'expiration
Vérifiez la date avec OpenSSL :
echo | openssl s_client -servername www.example.com -connect www.example.com:443 2>/dev/null | openssl x509 -noout -dates
Script simple d'alerte (à adapter, envoi mail ou monitoring) :
DOMAIN=www.example.com
EXPIRY=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
echo "Expiration : $EXPIRY"
Causes fréquentes d'échec sur VPS HolyCloud
- DNS : le domaine ne pointe plus vers l'IP du VPS après migration
- Pare-feu : port 80 fermé (challenge HTTP-01)
- Nginx : virtual host modifié,
server_nameincorrect - Rate limit Let's Encrypt : trop de tentatives — attendez ou utilisez le mode staging pour les tests :
sudo certbot renew --dry-run --server https://acme-staging-v02.api.letsencrypt.org/directory
- Certificat révoqué : réémettez avec
sudo certbot certonly --nginx -d votredomaine.fr
Étape 5 : cron alternatif (si pas de timer)
Vérifiez /etc/cron.d/certbot ou ajoutez :
0 3 * * * root certbot renew --quiet --deploy-hook "systemctl reload nginx"
Vérification
sudo certbot certificates
sudo certbot renew --dry-run
curl -vI https://www.example.com 2>&1 | grep -i expire
Besoin d'aide HolyCloud
- Renouvellement OK en dry-run mais site en erreur : rechargez Nginx (
sudo nginx -t && sudo systemctl reload nginx) - Challenge échoué : vérifiez que le domaine résout vers l'IP affichée dans l'espace client HolyCloud
- Support HolyCloud : sortie
certbot certificates, extraitletsencrypt.log, résultatdig +short votredomaine.fr