Erreurs

❌ Erreur SSL/TLS "ERR_CERT_DATE_INVALID — Certificat expiré" — Causes et Solutions

🔒 SSL / TLS

Le certificat SSL/TLS a dépassé sa date d'expiration

🔒 SSL/TLS 📋 6 causes 🔧 5 solutions
L'erreur ERR_CERT_DATE_INVALID (ou Your connection is not private) signifie que le certificat SSL du serveur a dépassé sa date de validité. Tous les navigateurs bloquent la connexion — les visiteurs voient une page d'avertissement rouge.

⚠️ Causes possibles

⚠️
Renouvellement automatique non configuré
Certbot ou acme.sh n'a pas de cron/timer pour renouveler automatiquement
⚠️
Erreur lors du renouvellement automatique
Le cron existe mais échoue silencieusement — port 80 fermé, DNS incorrect
⚠️
Certificat géré manuellement oublié
Un certificat acheté chez un registrar a expiré sans alerte
⚠️
Horloge système incorrecte
La date système du serveur est incorrecte — SSL refuse les connexions
⚠️
Let's Encrypt rate limit atteint
Trop de demandes de certificats — limite 5 par domaine par semaine
⚠️
Changement de serveur non suivi
Migration vers un nouveau serveur sans transférer/renouveler les certificats

🔧 Solutions étape par étape

1

Vérifier l'expiration du certificat

terminal
# Voir la date d'expiration d'un site
echo | openssl s_client -connect monsite.fr:443 2>/dev/null | \
  openssl x509 -noout -dates

# Voir les certificats locaux et leur expiration
openssl x509 -in /etc/letsencrypt/live/monsite.fr/cert.pem -noout -dates
openssl x509 -in /etc/ssl/certs/mon-cert.pem -noout -dates

# Script de vérification multi-sites
for domain in monsite.fr blog.monsite.fr api.monsite.fr; do
  expiry=$(echo | openssl s_client -connect $domain:443 2>/dev/null | \
    openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
  echo "$domain expire le : $expiry"
done

# Certbot — voir tous les certificats gérés
certbot certificates
2

Renouveler avec Certbot

terminal
# Renouveler tous les certificats Certbot
certbot renew

# Forcer le renouvellement même si pas expiré
certbot renew --force-renewal

# Renouveler un domaine spécifique
certbot renew --cert-name monsite.fr

# Après renouvellement — recharger le serveur web
systemctl reload nginx
# ou
systemctl reload apache2

# Tester le renouvellement sans l'appliquer
certbot renew --dry-run

# Debug si le renouvellement échoue
certbot renew --dry-run --debug-challenges
3

Configurer le renouvellement automatique

terminal
# Méthode 1 : cron (classique)
crontab -e
# Ajouter :
0 3 * * * certbot renew --quiet && systemctl reload nginx

# Méthode 2 : systemd timer (recommandé Debian/Ubuntu)
# Vérifier que le timer est actif
systemctl status certbot.timer
systemctl enable certbot.timer

# Méthode 3 : cron système
cat /etc/cron.d/certbot
# Doit contenir quelque chose comme :
# 0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

# Tester que le port 80 est accessible (requis pour Let's Encrypt HTTP challenge)
curl -I http://monsite.fr/.well-known/acme-challenge/test
4

Renouveler un certificat OpenSSL manuel

terminal
# Si certificat auto-signé — regénérer
openssl req -x509 -newkey rsa:4096 -keyout /etc/ssl/private/mon-key.pem \
  -out /etc/ssl/certs/mon-cert.pem -days 365 -nodes \
  -subj "/CN=monsite.local/O=MonEntreprise/C=FR"

# Si certificat signé par une CA interne
# Générer une nouvelle CSR
openssl req -new -newkey rsa:4096 -nodes \
  -keyout mon-site.key -out mon-site.csr \
  -subj "/CN=monsite.fr/O=MonEntreprise/C=FR"

# Envoyer la CSR à votre CA pour signature
# Puis installer le nouveau certificat

# Nginx — recharger après changement
nginx -t && systemctl reload nginx
5

Mettre en place des alertes d'expiration

terminal
# Script d'alerte par email (à mettre en cron)
#!/bin/bash
DOMAIN="monsite.fr"
ALERT_DAYS=30
EXPIRY=$(echo | openssl s_client -connect $DOMAIN:443 2>/dev/null | \
  openssl x509 -noout -enddate | cut -d= -f2)
EXPIRY_EPOCH=$(date -d "$EXPIRY" +%s)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( ($EXPIRY_EPOCH - $NOW_EPOCH) / 86400 ))

if [ $DAYS_LEFT -lt $ALERT_DAYS ]; then
  echo "ALERTE: Certificat $DOMAIN expire dans $DAYS_LEFT jours !" | \
    mail -s "Certificat SSL expirant bientôt" admin@monentreprise.fr
fi

# Ou via Zabbix — item externe :
# zabbix_agentd -t ssl.cert.expiry[monsite.fr,443]

🛡️ Comment éviter cette erreur

  • ✅ Utiliser Let's Encrypt avec renouvellement automatique via systemd timer — zéro intervention manuelle
  • ✅ Mettre en place un monitoring de l'expiration des certificats (Zabbix, UptimeRobot, script cron)
  • ✅ Pour les certificats achetés (wildcards), créer un rappel dans le calendrier 60 jours avant l'expiration
  • ✅ Tester le renouvellement automatique avec certbot renew --dry-run après installation
Ajouter Les Fibrés à mes sources préférées
Retrouvez plus souvent nos guides dans vos résultats Google