🚧 Site en développement : des problèmes peuvent survenir. Merci de les signaler via la page de contact.

Automatiser le renouvellement SSL avec Let’s Encrypt en 2025 : guide complet

Publié le 17 août 2025 par Yannis Piot Pilot | Administration système

En 2025, un site web sans HTTPS est impensable.
Les navigateurs modernes (Chrome, Firefox, Safari, Edge) marquent désormais les sites non sécurisés comme “dangereux”, ce qui fait fuir les visiteurs et plombe le référencement.

La bonne nouvelle : grâce à Let’s Encrypt, vous pouvez obtenir gratuitement des certificats SSL/TLS valides et reconnus par tous les navigateurs.
La difficulté : ces certificats n’ont qu’une durée de vie de 90 jours. Sans automatisation du renouvellement, vous risquez de voir votre site passer en “connexion non sécurisée” du jour au lendemain.

Ce guide va vous expliquer en détail comment installer, configurer et surtout automatiser le renouvellement des certificats SSL Let’s Encrypt sur vos serveurs Linux, que vous soyez admin système, devops, ou simplement propriétaire d’un site web.

Nous allons non seulement voir comment faire, mais surtout pourquoi c’est indispensable, les risques si vous oubliez et comment intégrer cette gestion dans une approche DevOps moderne.

Pourquoi HTTPS est incontournable en 2025

Pourquoi ?

HTTPS chiffre les échanges entre le navigateur et le serveur. C’est devenu un standard de sécurité et de confiance.

Risque sans HTTPS

  • Les données circulent en clair → interception possible (mots de passe, cartes bancaires).
  • Le site est marqué comme non sécurisé dans les navigateurs.
  • Le SEO chute : Google pénalise les sites en HTTP.

Exemple réel

  • En 2022, une grande plateforme d’e-commerce indienne a perdu des milliers de clients après une fuite de données due à un site partiellement en HTTP.
  • En 2024, Google a confirmé que plus de 98 % du trafic Chrome était désormais chiffré.

Solution

Mettre en place un certificat SSL via Let’s Encrypt, gratuit et automatisé.

Installer Let’s Encrypt (Certbot)

Pourquoi ?

Certbot est l’outil officiel recommandé par l’EFF pour gérer les certificats Let’s Encrypt.

Risque si ignoré

Installer manuellement un certificat SSL chaque trimestre est fastidieux et source d’erreurs.

Exemple

Des milliers de sites web sont tombés en 2023 car leurs administrateurs avaient oublié de renouveler manuellement les certificats.

Solution

Installation sur Debian/Ubuntu :

Bash
sudo apt update
sudo apt install certbot python3-certbot-nginx -y

Installation sur RHEL/CentOS :

Bash
sudo dnf install certbot python3-certbot-nginx -y

Obtenir un certificat SSL pour un domaine :

Bash
sudo certbot --nginx -d monsite.com -d www.monsite.com

Automatiser le renouvellement

Pourquoi ?

Les certificats Let’s Encrypt expirent après 90 jours. L’automatisation évite les interruptions de service.

Risque

  • Site affiché en erreur : “Votre connexion n’est pas privée”.
  • Perte de visiteurs, baisse SEO, perte de revenus.

Exemple réel

En 2021, un certificat Let’s Encrypt expiré a provoqué des coupures massives de services pour des millions d’appareils IoT.

Solution

Ajouter une tâche cron quotidienne :

Bash
0 3 * * * certbot renew --quiet

Tester le renouvellement automatique :

Bash
sudo certbot renew --dry-run

Gérer plusieurs domaines et sous-domaines

Pourquoi ?

Un seul serveur peut héberger plusieurs sites ou applications (multi-vhosts).

Risque

Si tous les certificats ne sont pas renouvelés correctement, certains sites tomberont.

Exemple réel

Une PME française a vu ses sous-domaines tomber en cascade en 2023 car seul le domaine principal avait été renouvelé.

Solution

Certificat multi-domaine :

Bash
sudo certbot --nginx -d site1.com -d site2.com -d app.site1.com

Certificat wildcard (*.domaine.com) :

Bash
sudo certbot -d "*.monsite.com" --manual --preferred-challenges dns certonly

Automatiser la validation DNS via API

Pourquoi ?

Pour les wildcards, Let’s Encrypt nécessite une validation DNS. La gestion manuelle est impossible à long terme.

Risque

Oublier de mettre à jour les enregistrements TXT → certificat non renouvelé → site inaccessible.

Exemple réel

En 2022, un hébergeur a laissé expirer des centaines de certificats wildcard faute d’automatisation DNS.

Solution

Certbot propose des plugins DNS pour les principaux providers :

  • Cloudflare :
Bash
sudo apt install python3-certbot-dns-cloudflare
certbot -d "*.monsite.com" --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/cloudflare.ini
  • OVH :
Bash
sudo apt install python3-certbot-dns-ovh
  • Route53 (AWS), Gandi, Google DNS, etc.

Sécuriser la configuration SSL/TLS

Pourquoi ?

Un certificat SSL n’est pas suffisant si le serveur accepte encore des protocoles faibles.

Risque

  • Vulnérabilités type POODLE, BEAST, Heartbleed.
  • Note médiocre sur SSL Labs → perte de crédibilité.

Exemple réel

En 2020, plus de 30 % des sites en HTTPS acceptaient encore TLS 1.0/1.1 (obsolètes).

Solution

Nginx :

YAML
ssl_protocols TLSv1.3;
ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256;
ssl_prefer_server_ciphers on;

Tester la configuration sur SSL Labs.

Intégration DevOps (CI/CD, Kubernetes, Docker)

Pourquoi ?

En 2025, la plupart des applications sont déployées via conteneurs et orchestrateurs.

Risque

Sans intégration, vos pods ou containers tournent avec des certificats expirés.

Exemple réel

En 2023, une fintech européenne a subi une panne de 4h car un cluster Kubernetes n’avait pas renouvelé automatiquement ses certificats.

Solution

  • Docker + Traefik :
    Traefik gère automatiquement Let’s Encrypt :
YAML
traefik:
  image: traefik
  command:
    - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
    - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
    - "[email protected]"
    - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
  • Kubernetes + cert-manager :
YAML
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: monsite-com
spec:
  secretName: monsite-com-tls
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
  dnsNames:
  - monsite.com
  - www.monsite.com

Bonnes pratiques pour 2025

✅ Toujours tester le renouvellement (certbot renew --dry-run).
✅ Utiliser uniquement TLS 1.3.
✅ Automatiser DNS-01 pour les wildcards.
✅ Intégrer Let’s Encrypt dans CI/CD et Kubernetes.
✅ Monitorer la date d’expiration avec un script (alerte si < 15 jours).

Exemple de check :

Bash
echo | openssl s_client -connect monsite.com:443 -servername monsite.com 2>/dev/null | openssl x509 -noout -dates

Scripts de monitoring d’expiration

Pourquoi ?

Même avec un renouvellement automatisé, il est crucial d’avoir une surveillance indépendante. Si certbot plante, vous devez être prévenu avant que le certificat expire.

Risque

  • Le script cron échoue en silence → certificat expiré → site hors ligne.
  • Sans monitoring externe, vous découvrez le problème en même temps que vos utilisateurs.

Exemple réel

En 2023, un CDN majeur a connu une panne mondiale de plusieurs heures suite à un bug dans son système de renouvellement automatisé Let’s Encrypt.

Solution

Script Bash simple (alerte mail)

Bash
#!/bin/bash
DOMAINS=("monsite.com" "api.monsite.com" "blog.monsite.com")
ALERT_DAYS=15

for domain in "${DOMAINS[@]}"; do
    exp=$(echo | openssl s_client -servername $domain -connect $domain:443 2>/dev/null | openssl x509 -noout -dates | grep notAfter | cut -d= -f2)
    exp_date=$(date -d "$exp" +%s)
    now_date=$(date +%s)
    days_left=$(( ($exp_date - $now_date) / 86400 ))

    if [ "$days_left" -lt "$ALERT_DAYS" ]; then
        echo "ALERTE: certificat $domain expire dans $days_left jours !" | mail -s "Expiration SSL $domain" [email protected]
    fi
done

Script Bash (alerte Telegram)

Bash
#!/bin/bash
BOT_TOKEN="123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
CHAT_ID="987654321"
DOMAINS=("monsite.com" "api.monsite.com")
ALERT_DAYS=15

for domain in "${DOMAINS[@]}"; do
    exp=$(echo | openssl s_client -servername $domain -connect $domain:443 2>/dev/null | openssl x509 -noout -dates | grep notAfter | cut -d= -f2)
    exp_date=$(date -d "$exp" +%s)
    now_date=$(date +%s)
    days_left=$(( ($exp_date - $now_date) / 86400 ))

    if [ "$days_left" -lt "$ALERT_DAYS" ]; then
        curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" \
        -d chat_id=$CHAT_ID \
        -d text="⚠️ Certificat SSL de $domain expire dans $days_left jours !"
    fi
done

💡 Ces scripts peuvent être mis en cron (/etc/cron.daily/check_ssl.sh) pour surveiller vos certificats.

Dashboard Grafana SSL (prêt à importer)

Pourquoi ?

Grafana permet de centraliser l’état des certificats SSL sur un seul tableau de bord.

Risque

Si vous administrez plusieurs dizaines de domaines, difficile de suivre manuellement chaque expiration.

Exemple réel

Un hébergeur mutualisé en 2022 a laissé expirer des certificats sur 200 sous-domaines faute de visibilité globale.

Solution

Exemple de dashboard Grafana JSON pour suivre l’expiration des certificats stockés dans InfluxDB (mesure ssl_expiry_days).

JSON
{
  "title": "SSL Certificates Monitoring",
  "panels": [
    {
      "type": "stat",
      "title": "Expiration SSL",
      "targets": [
        {
          "measurement": "ssl_expiry_days",
          "fields": ["value"]
        }
      ],
      "options": {
        "reduceOptions": {"calcs": ["last"], "fields": ""},
        "colorMode": "value",
        "thresholds": {
          "mode": "absolute",
          "steps": [
            {"color": "green", "value": null},
            {"color": "orange", "value": 15},
            {"color": "red", "value": 5}
          ]
        }
      }
    }
  ]
}

Résultat :

  • Vert = > 15 jours restants
  • Orange = entre 5 et 15 jours
  • Rouge = < 5 jours

Vous pouvez compléter avec un graphique par domaine pour suivre les expirations dans le temps.

Erreurs fréquentes et comment les éviter

Oublier d’ouvrir le port 80 pour la validation HTTP

  • Risque : Let’s Encrypt échoue à valider le domaine.
  • Solution : s’assurer que le port 80 est ouvert au moment du challenge ACME.

Mauvaise configuration cron (pas d’output)

  • Risque : certbot échoue sans log → certificat non renouvelé.
  • Solution : rediriger la sortie vers un fichier log.
0 3 * * * certbot renew --quiet >> /var/log/letsencrypt/renew.log 2>&1

Oublier les sous-domaines

  • Risque : seul le domaine principal est renouvelé.
  • Solution : lister tous les sous-domaines nécessaires dans la commande Certbot.

Utiliser TLS 1.0/1.1/1.2 en 2025

  • Risque : sécurité faible, navigateur marque le site comme obsolète.
  • Solution : forcer TLS 1.3 dans la configuration.

Checklist finale Let’s Encrypt 2025

✅ Certbot installé et configuré.
✅ Cron automatique testé avec --dry-run.
✅ Plugins DNS configurés pour wildcards.
✅ Scripts de monitoring actifs (alertes mail/Telegram).
✅ Dashboard Grafana importé pour suivi global.
✅ TLS 1.3 forcé, ciphers modernes uniquement.
✅ Logs de renouvellement vérifiés régulièrement.

Conclusion

En 2025, HTTPS n’est plus une option, c’est une condition minimale de confiance et de conformité.
Let’s Encrypt a démocratisé le SSL en le rendant gratuit et accessible, mais il impose une rigueur : des certificats courts (90 jours) et donc la nécessité de les renouveler automatiquement.

Avec Certbot, les plugins DNS, les intégrations modernes comme Traefik ou cert-manager, et surtout des outils de monitoring indépendants (scripts Bash + alertes, dashboard Grafana), vous pouvez garantir une gestion 100 % fiable et automatisée de vos certificats.

👉 Résultat :

  • Vos sites restent toujours sécurisés.
  • Vos utilisateurs naviguent en confiance.
  • Vos équipes techniques gagnent du temps et dorment plus sereinement.
  • Votre entreprise gagne en crédibilité et en SEO.

En clair : un HTTPS automatisé, surveillé et renforcé est aujourd’hui la base de toute infrastructure web sérieuse.

Cet article a été révisé et optimisé par une intelligence artificielle pour améliorer sa clarté et sa pertinence.