Runbook — Certificat SSL expiré sur un sous-domaine¶
Sévérité : Majeure (navigateurs affichent "non sécurisé")
Temps de résolution attendu : 10 à 30 min
Symptômes¶
- Visiteur voit l'avertissement Chrome "NET::ERR_CERT_DATE_INVALID"
- Lighthouse / curl
--insecurerequis pour accéder - Alerte Uptime Kuma "Certificate is about to expire" (configure pour 14j avant)
Diagnostic¶
```bash
Date d'expiration du cert¶
echo | openssl s_client -connect {slug}.cavalmanager.fr:443 -servername {slug}.cavalmanager.fr 2>/dev/null \ | openssl x509 -noout -dates
Lister les certs NPM¶
curl -s -u admin@cavalmanager.fr:$NPM_PASSWORD \ http://192.168.1.117:81/api/nginx/certificates \ | python3 -m json.tool | grep -E "(domain_names|expires_on|nice_name)" ```
Procédure¶
Cas 1 : NPM Let's Encrypt auto-renewal a échoué¶
```bash
Connexion NPM web UI¶
http://192.168.1.117:81 → admin@cavalmanager.fr / $NPM_PASSWORD¶
SSL Certificates → trouver le cert → Renew¶
Ou via API¶
CERT_ID=42 # ID du cert curl -X POST -u admin@cavalmanager.fr:$NPM_PASSWORD \ http://192.168.1.117:81/api/nginx/certificates/$CERT_ID/renew ```
Cas 2 : Le sous-domaine pointe vers le mauvais serveur¶
- DNS Cloudflare → vérifier que
{slug}.cavalmanager.frpointe vers IP NPM (192.168.1.117 via tunnel) - Si correction DNS : attendre 5 min propagation puis re-renew
Cas 3 : Rate-limit Let's Encrypt (5 certs/semaine/domain)¶
- Patienter (compteur reset hebdo)
- En dépannage : utiliser cert wildcard
*.cavalmanager.fr(déjà créé)
Vérification¶
```bash echo | openssl s_client -connect {slug}.cavalmanager.fr:443 2>/dev/null \ | openssl x509 -noout -enddate
notAfter=... attendu = ~90j depuis aujourd'hui¶
```
Prévention¶
- Uptime Kuma config : alerte 14j avant expiration de chaque cert
- Provisioning auto d'un nouveau tenant crée le cert via NPM API (cf admin/server.js)