Fehlermeldung
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
Die beiden Zeitstempel werden bei jedem Fehler eingesetzt: die Uhrzeit des prüfenden Systems und die Grenze aus dem Zertifikat. „is after“ bedeutet abgelaufen, „is before“ noch nicht gültig.
Go crypto/x509 — CertificateInvalidError (Expired)
Was der Fehler bedeutet
Der Zeitpunkt der Prüfung liegt außerhalb des Fensters [NotBefore, NotAfter] des Zertifikats. Go nennt beide Seiten des Vergleichs in der Meldung; damit ist das einer der wenigen Fehler, die ihre Diagnose gleich mitliefern: Lies die beiden Zeitstempel und sieh nach, welcher nicht stimmt – der aus dem Zertifikat oder der von der Uhr.
Warum der Fehler auftritt
Die automatische Erneuerung ist ausgefallen
häufigEin certbot-Timer, der nicht mehr läuft, ein ACME-Konto, das seine Autorisierung verloren hat, oder ein Load Balancer, der ein altes Zertifikat ausliefert, obwohl die Erneuerung anderswo geklappt hat. Da die maximale Laufzeit öffentlicher Zertifikate bis 2029 auf 47 Tage schrumpft, ist manuelles Erneuern keine Option mehr.
Die Uhr des prüfenden Rechners geht falsch
häufig„is before“-Fehler auf frisch gestarteten Geräten (Raspberry Pi ohne RTC, aus Snapshots wiederhergestellte VMs, IoT-Hardware) bedeuten meist, dass die Uhr 1970 oder den letzten Monat anzeigt – dann wirkt jedes aktuelle Zertifikat noch nicht gültig oder abgelaufen.
Uhrenabweichung an der Gültigkeitsgrenze
gelegentlichEin vor Sekunden ausgestelltes Zertifikat (NotBefore = jetzt), das ein Host prüft, dessen Uhr eine Minute nachgeht, scheitert als noch nicht gültig; kurzlebige Mesh-Zertifikate machen es leicht, in dieses Zeitfenster zu geraten.
So behebst du den Fehler
- 1.
Tatsächliche Datumsangaben des ausgelieferten Zertifikats lesen
Stelle fest, welches Zertifikat der Endpunkt gerade ausliefert – nach einer Erneuerung bedeutet „expired“ oft „das neue Zertifikat existiert, wird aber nicht ausgeliefert“. Lade den terminierenden Proxy neu oder starte ihn neu, wenn sich die Datumsangaben auf der Festplatte und im Netzwerkverkehr unterscheiden.
bash echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \ | openssl x509 -noout -dates # notBefore=... notAfter=... - 2.
Zeitsynchronisierung korrigieren und überwachen
Korrigiere bei „is before“-Fällen die Uhr und sorge dafür, dass sie korrekt bleibt; die Zertifikatsprüfung ist nur so gut wie die lokale Uhrzeit.
bash timedatectl status # NTP active? sudo timedatectl set-ntp true - 3.
Erneuerung automatisieren und Restlaufzeit mit Benachrichtigungen überwachen
Erneuere nach 2/3 der Laufzeit (Standard bei certbot) und überwache den Ablauf von außerhalb des Hosts. Unser Signature Health Check für Domains bewertet genau das – Kette, Datumsangaben und die neuen Regeln zu verkürzten Laufzeiten – und verschickt kostenlose Benachrichtigungen vor dem Ablauf.