Message d’erreur
x509: certificate has expired or is not yet valid: current time 2026-08-20T15:47:41+03:00 is after 2026-08-19T12:47:41Z
Les deux horodatages sont propres à chaque échec : l’horloge du vérificateur et la borne du certificat. « is after » signifie que le certificat a expiré ; « is before », qu’il n’est pas encore valide.
Go crypto/x509 — CertificateInvalidError (Expired)
Ce que cela signifie
L’instant de vérification tombe en dehors de la fenêtre [NotBefore, NotAfter] du certificat. Go indique les deux termes de la comparaison dans le message, ce qui en fait l’une des rares erreurs qui portent leur propre diagnostic : lisez les deux horodatages et voyez lequel est faux (celui du certificat ou celui de l’horloge).
Pourquoi cela se produit
Le renouvellement automatique a cessé de fonctionner
fréquenteUn timer certbot qui s’est arrêté, un compte ACME qui a perdu son autorisation, ou un répartiteur de charge qui sert un ancien certificat alors que le renouvellement a réussi ailleurs. La durée de vie maximale des certificats publics diminue jusqu’à 47 jours d’ici 2029 : le renouvellement manuel n’est donc plus tenable.
L’horloge de la machine qui vérifie est fausse
fréquenteLes échecs « is before » sur des appareils qui viennent de démarrer (Raspberry Pi sans horloge RTC, VM restaurées à partir d’instantanés, matériel IoT) signifient généralement que l’horloge indique 1970 ou le mois dernier : chaque certificat actuel est alors vu comme pas encore valide ou comme expiré.
Décalage d’horloge à la limite de validité
occasionnelleUn certificat émis il y a quelques secondes (NotBefore = maintenant) et vérifié par un hôte dont l’horloge retarde d’une minute est rejeté comme pas encore valide ; avec les certificats à courte durée de vie des service mesh, on tombe facilement dans cette fenêtre.
Comment corriger l’erreur
- 1.
Lire les dates réelles du certificat servi
Vérifiez quel certificat le point de terminaison sert en ce moment : après un renouvellement, « expiré » signifie souvent « le nouveau certificat existe, mais n’est pas servi ». Rechargez ou redémarrez le proxy qui termine TLS si les dates sur le disque et sur le réseau diffèrent.
bash echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \ | openssl x509 -noout -dates # notBefore=... notAfter=... - 2.
Corriger et surveiller la synchronisation de l’heure
Dans les cas « is before », corrigez l’horloge et veillez à ce qu’elle reste juste : la validation des certificats ne vaut que ce que vaut l’heure locale.
bash timedatectl status # NTP active? sudo timedatectl set-ntp true - 3.
Automatiser le renouvellement et alerter sur la durée de vie restante
Renouvelez aux 2/3 de la durée de vie (le réglage par défaut de certbot) et surveillez l’expiration depuis l’extérieur de l’hôte. Notre bilan de santé des signatures de domaine (Signature Health) évalue exactement cela (chaîne, dates et nouvelles règles de durée de vie réduite) et envoie gratuitement des alertes d’expiration.