Fehlermeldung
invalid peer certificate: certificate expired: verification time
Vollständige Form: „invalid peer certificate: certificate expired: verification time <unix> (UNIX), but certificate is not valid after <unix> (<n> seconds ago)“. Frühere rustls-Releases gaben nur den Namen der Variante aus („invalid peer certificate: Expired“). Zertifikate, die noch nicht gültig sind, erzeugen eine eigene Variante „not valid yet“.
rustls 0.23 (via reqwest, ureq, hyper-rustls) — CertificateError::ExpiredContext
Was der Fehler bedeutet
rustls hat die Kette geprüft, aber ein Zertifikat darin hatte zum Zeitpunkt der Prüfung das Datum in notAfter bereits überschritten. rustls 0.23 nennt beide Zeitpunkte als Unix-Zeitstempel und dazu, vor wie vielen Sekunden das Zertifikat abgelaufen ist – so erkennst du sofort, ob das Zertifikat oder die Uhr falsch ist.
Warum der Fehler auftritt
Das Zertifikat des Servers ist abgelaufen
häufigDie Erneuerung ist fehlgeschlagen, oder das erneuerte Zertifikat wird noch nicht ausgeliefert.
Die Uhr des Clients geht falsch
gelegentlichEmbedded-Geräte und Container auf Hosts ohne NTP können weit danebenliegen; vergleiche den Zeitpunkt der Prüfung in der Meldung mit der tatsächlichen Uhrzeit.
Ein abgelaufenes Zertifikat, als Vertrauensanker gepinnt
seltenClients, die das Serverzertifikat selbst als Root-Zertifikat hinzufügen, prüfen weiterhin gegen dieses alte Zertifikat, nachdem der Server sein Zertifikat erneuert hat.
So behebst du den Fehler
- 1.
Zeitstempel umrechnen
date -u -d @<seconds> wandelt beide Werte in lesbare UTC-Zeiten um.
bash # The message gives both instants as Unix seconds date -u -d @1743465600 # certificate's notAfter date -u # this machine's time - 2.
Erneuern und neu ausrollen
Erneuere das Zertifikat des Servers, lade den Dienst neu und bestätige das neue Ablaufdatum von außen über das Netzwerk.
bash echo | openssl s_client -connect api.example.com:443 -servername api.example.com 2>/dev/null | openssl x509 -noout -enddate sudo certbot renew && sudo systemctl reload nginx