Un certificat SSL expiré provoque l’affichage d’un avertissement de sécurité pleine page par les navigateurs, empêchant les visiteurs d’accéder à votre site. Voici comment vérifier la date d’expiration de votre certificat et mettre en place une surveillance.
Vérifier depuis votre navigateur
- Visitez votre site avec
https:// - Cliquez sur l’icône du cadenas dans la barre d’adresse
- Cliquez sur “Certificat” ou “La connexion est sécurisée” → “Le certificat est valide”
- Cherchez la date “Valide jusqu’au” ou “Expire le”
Vérifier avec OpenSSL (ligne de commande)
Vérification à distance (depuis n’importe quelle machine)
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -enddate
Sortie : notAfter=Aug 5 12:00:00 2026 GMT
Vérification de fichier local
openssl x509 -noout -enddate -in /etc/ssl/gethttps/fullchain.pem
Vérifier tous les détails en une fois
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -subject -issuer -dates
Vérifier avec un script en une ligne
Vérifier si un certificat expire dans les 30 jours :
if openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -checkend 2592000 > /dev/null 2>&1; then
echo "Le certificat est valide pour au moins 30 jours supplémentaires"
else
echo "ATTENTION : Le certificat expire dans moins de 30 jours !"
fi
Vérifier plusieurs domaines en une fois
Si vous gérez plusieurs domaines, vérifiez-les tous dans une boucle :
for domain in example.com www.example.com api.example.com; do
expiry=$(echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
echo "$domain — expire : $expiry"
done
Surveillance automatisée avec cron
Créez une tâche cron quotidienne qui vous envoie un e-mail lorsqu’un certificat est à moins de 30 jours de son expiration :
#!/bin/bash
# Enregistrer sous /usr/local/bin/check-ssl-expiry.sh
DOMAINS="example.com www.example.com api.example.com"
WARN_DAYS=30
WARN_SECS=$((WARN_DAYS * 86400))
for domain in $DOMAINS; do
if ! echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | \
openssl x509 -noout -checkend $WARN_SECS > /dev/null 2>&1; then
echo "ATTENTION : le certificat de $domain expire dans moins de $WARN_DAYS jours" | \
mail -s "Alerte expiration SSL : $domain" admin@example.com
fi
done
Ajouter à la crontab : 0 9 * * * /usr/local/bin/check-ssl-expiry.sh
Configurer des services de surveillance
Pour une approche plus robuste, utilisez un service de surveillance :
| Méthode | Comment | Coût | Options d’alerte |
|---|---|---|---|
| Rappel calendrier | Définir 60 jours après l’émission | Gratuit | Manuel |
| Script cron | Exécuter le script de vérification quotidiennement | Gratuit | |
| UptimeRobot | Ajouter un moniteur SSL, définir le seuil d’alerte | Offre gratuite | E-mail, Slack, webhook |
| Better Uptime | Surveillance SSL avec gestion d’incidents | Offre gratuite | E-mail, SMS, Slack |
| Renouvellement automatique Certbot | certbot renew via timer systemd | Gratuit | Empêche entièrement l’expiration |
Pour les certificats 90 jours de Let’s Encrypt, renouvelez au jour 60 (marge de 30 jours).
Quels détails du certificat dois-je vérifier ?
Au-delà de la date d’expiration, vérifiez périodiquement :
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -text | grep -E 'Subject:|Issuer:|Not After|DNS:'
Cela affiche :
- Subject/SAN — le certificat couvre les bons domaines
- Issuer — émis par la CA attendue (par ex. Let’s Encrypt)
- Not After — date d’expiration
- Noms DNS — tous les noms de domaine dans le champ SAN
Questions fréquemment posées
Que se passe-t-il quand un certificat expire ?
Les navigateurs affichent un avertissement pleine page comme “Votre connexion n’est pas privée” (Chrome) ou “Avertissement : Risque potentiel de sécurité” (Firefox). La plupart des visiteurs quitteront immédiatement. Les moteurs de recherche peuvent également déclasser ou désindexer vos pages jusqu’au renouvellement du certificat.
À quelle fréquence dois-je vérifier ?
Si vous avez un renouvellement automatique (Certbot), vérifiez mensuellement comme filet de sécurité. Si vous renouvelez manuellement (GetHTTPS), vérifiez au jour 50 et définissez un rappel ferme au jour 60. Avec la validité de 47 jours à partir de 2029, la surveillance devient encore plus critique.
Puis-je vérifier l’expiration sans accès à la ligne de commande ?
Oui. Des outils en ligne comme SSL Labs Server Test et SSL Checker de SSL Shopper affichent les détails du certificat, y compris les dates d’expiration — entrez simplement votre domaine. Les DevTools du navigateur le montrent également (icône du cadenas → Détails du certificat).
Que faire si mon certificat a déjà expiré ?
Renouvelez immédiatement. Visitez GetHTTPS pour obtenir un nouveau certificat, remplacez les fichiers sur votre serveur et rechargez le serveur web. Le processus prend 5 minutes. Il n’y a aucune pénalité pour avoir laissé un certificat expirer — renouvelez et installez simplement le nouveau.
Puis-je surveiller plusieurs domaines depuis un seul script ?
Oui. Voici un script qui vérifie tous vos domaines et affiche les jours restants :
#!/bin/bash
for domain in example.com www.example.com api.example.com; do
expiry=$(echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
days_left=$(( ($(date -d "$expiry" +%s) - $(date +%s)) / 86400 ))
if [ "$days_left" -lt 30 ]; then
echo "ATTENTION $domain : $days_left jours restants"
else
echo "OK $domain : $days_left jours restants"
fi
done
Remarque : la syntaxe date -d est spécifique à Linux. Sur macOS, utilisez date -j -f "%b %d %H:%M:%S %Y %Z".