Message d’erreur
invalid peer certificate: certificate expired: verification time
Forme complète : « invalid peer certificate: certificate expired: verification time <unix> (UNIX), but certificate is not valid after <unix> (<n> seconds ago) ». Les versions antérieures de rustls n’affichaient que le nom de la variante (« invalid peer certificate: Expired »). Les certificats qui ne sont pas encore valides produisent une variante distincte, « not valid yet ».
rustls 0.23 (via reqwest, ureq, hyper-rustls) — CertificateError::ExpiredContext
Ce que cela signifie
rustls a vérifié la chaîne, mais l’un de ses certificats a dépassé sa date notAfter à l’heure de la vérification. rustls 0.23 indique les deux instants sous forme d’horodatages Unix, ainsi que le nombre de secondes écoulées depuis l’expiration du certificat : vous savez ainsi immédiatement si c’est le certificat ou l’horloge qui est en cause.
Pourquoi cela se produit
Le certificat du serveur a expiré
fréquenteLe renouvellement a échoué, ou le certificat renouvelé n’est pas encore servi.
L’horloge du client est fausse
occasionnelleLes équipements embarqués et les conteneurs sur des hôtes sans NTP peuvent avoir une heure très décalée ; comparez l’heure de vérification indiquée dans le message avec l’heure réelle.
Un certificat expiré épinglé comme ancre de confiance
rareLes clients qui ajoutent le certificat du serveur lui-même comme racine continuent de valider par rapport à cet ancien certificat après le renouvellement côté serveur.
Comment corriger l’erreur
- 1.
Convertir les horodatages
date -u -d @<seconds> convertit les deux valeurs en heures UTC lisibles.
bash # The message gives both instants as Unix seconds date -u -d @1743465600 # certificate's notAfter date -u # this machine's time - 2.
Renouveler et redéployer
Renouvelez le certificat du serveur, rechargez le service, puis confirmez la nouvelle date de fin côté réseau.
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