Renouvellement SSL automatique
Renouvellement SSL automatique sur VPS RedHeberg
Guide complet pour configurer et automatiser le renouvellement des certificats SSL Let's Encrypt sur vos VPS RedHeberg avec Certbot.
Prérequis
info
Ce guide s'applique aux VPS XEON KVM et VPS Game Ryzen de RedHeberg. Les certificats Let's Encrypt ont une durée de vie de 90 jours et doivent être renouvelés automatiquement.
- VPS RedHeberg avec un serveur web configuré (Nginx ou Apache)
- Nom de domaine pointant vers votre IP publique
- Certificat SSL initial déjà installé via Certbot
Installation de Certbot (si nécessaire)
Debian/Ubuntu
# Mise à jour des paquets
sudo apt update && sudo apt upgrade -y
# Installation de Certbot
sudo apt install certbot python3-certbot-nginx python3-certbot-apache -y
# Vérification de l'installation
certbot --version
AlmaLinux/Rocky Linux
# Installation d'EPEL et Snapd
sudo dnf install epel-release snapd -y
sudo systemctl enable --now snapd.socket
# Installation de Certbot via Snap
sudo snap install core && sudo snap refresh core
sudo snap install --classic certbot
# Création du lien symbolique
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Configuration du renouvellement automatique
Test du renouvellement
Avant d'automatiser, testez le renouvellement sans modification :
# Test en mode dry-run (simulation)
sudo certbot renew --dry-run
# Affichage des certificats installés
sudo certbot certificates
Renouvellement manuel
# Renouvellement de tous les certificats
sudo certbot renew
# Renouvellement d'un certificat spécifique
sudo certbot renew --cert-name votre-domaine.com
# Renouvellement avec rechargement automatique du serveur web
sudo certbot renew --post-hook "systemctl reload nginx"
Automatisation avec Cron
Création du script de renouvellement
# Création du script
sudo nano /etc/cron.d/certbot-renew
# Contenu du fichier pour Nginx
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 */12 * * * root certbot renew --quiet --post-hook "systemctl reload nginx"
Configuration pour Apache
# Script pour Apache
sudo nano /etc/cron.d/certbot-renew
# Contenu
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 */12 * * * root certbot renew --quiet --post-hook "systemctl reload apache2"
Vérification du cron
# Vérification des tâches cron actives
sudo crontab -l
# Test manuel du script cron
sudo run-parts --test /etc/cron.d/
# Logs des tâches cron
sudo tail -f /var/log/cron
Automatisation avec Systemd Timer
Création du service
# Création du service
sudo nano /etc/systemd/system/certbot-renew.service
[Unit]
Description=Renouvellement automatique des certificats SSL
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"
User=root
Création du timer
# Création du timer
sudo nano /etc/systemd/system/certbot-renew.timer
[Unit]
Description=Timer pour renouvellement SSL
Requires=certbot-renew.service
[Timer]
OnCalendar=*-*-* 12,00:00
RandomizedDelaySec=3600
Persistent=true
[Install]
WantedBy=timers.target
Activation du timer
# Rechargement de systemd
sudo systemctl daemon-reload
# Activation du timer
sudo systemctl enable certbot-renew.timer
sudo systemctl start certbot-renew.timer
# Vérification du statut
sudo systemctl status certbot-renew.timer
sudo systemctl list-timers certbot-renew*
Certificats wildcard
Génération d'un certificat wildcard
# Certificat wildcard avec validation DNS
sudo certbot certonly --manual --preferred-challenges dns \
-d "*.votre-domaine.com" -d "votre-domaine.com"
# Renouvellement automatique (nécessite un plugin DNS)
sudo certbot renew --cert-name votre-domaine.com
Configuration avec plugin DNS
# Installation du plugin Cloudflare (exemple)
sudo pip3 install certbot-dns-cloudflare
# Configuration des identifiants
sudo nano /etc/letsencrypt/cloudflare.ini
dns_cloudflare_email = votre-email@domaine.com
dns_cloudflare_api_key = votre_api_key_cloudflare
# Protection du fichier
sudo chmod 600 /etc/letsencrypt/cloudflare.ini
# Génération du certificat wildcard
sudo certbot certonly --dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
-d "*.votre-domaine.com"
Vérification et monitoring
Vérification des dates d'expiration
# Affichage des certificats et dates d'expiration
sudo certbot certificates
# Vérification d'un domaine spécifique
echo | openssl s_client -connect votre-domaine.com:443 2>/dev/null | \
openssl x509 -noout -dates
# Script de surveillance
sudo nano /usr/local/bin/ssl-check.sh
#!/bin/bash
# Script de vérification SSL
DOMAIN="votre-domaine.com"
THRESHOLD=30
EXPIRY=$(echo | openssl s_client -connect $DOMAIN:443 2>/dev/null | \
openssl x509 -noout -dates | grep notAfter | cut -d= -f2)
EXPIRY_EPOCH=$(date -d "$EXPIRY" +%s)
NOW_EPOCH=$(date +%s)
DAYS_UNTIL_EXPIRY=$(( ($EXPIRY_EPOCH - $NOW_EPOCH) / 86400 ))
if [ $DAYS_UNTIL_EXPIRY -lt $THRESHOLD ]; then
echo "ALERTE: Le certificat SSL expire dans $DAYS_UNTIL_EXPIRY jours"
# Ici, vous pouvez ajouter une notification par email
fi
Logs de renouvellement
# Consultation des logs Certbot
sudo tail -f /var/log/letsencrypt/letsencrypt.log
# Logs système pour les timers
sudo journalctl -u certbot-renew.service -f
# Vérification des derniers renouvellements
sudo find /etc/letsencrypt/archive/ -name "*.pem" -mtime -7
Dépannage des rate limits
Rate Limits Let's Encrypt
Let's Encrypt impose des limites : 50 certificats/semaine par domaine enregistré, 300 certificats/heure par compte.
Vérification des limites
# Test avec l'environnement de staging
sudo certbot certonly --staging --nginx -d test.votre-domaine.com
# Suppression des certificats de test
sudo certbot delete --cert-name test.votre-domaine.com