Message d’erreur
verify error:num=10:certificate has expired
Également affiché sous la forme
- error 10 at 0 depth lookup: certificate has expired
- Verify return code: 10 (certificate has expired)
s_client affiche « verify error:num=10:certificate has expired » suivi de « notAfter=… » ; openssl verify affiche « error 10 at <depth> depth lookup: certificate has expired ». Les certificats qui ne sont pas encore valides donnent l’erreur 9, « certificate is not yet valid ».
OpenSSL CLI (openssl s_client / openssl verify) — X509_V_ERR_CERT_HAS_EXPIRED
Ce que cela signifie
Erreur OpenSSL 10 (X509_V_ERR_CERT_HAS_EXPIRED) : un certificat de la chaîne a une date notAfter passée par rapport à l’heure de vérification, qui est celle de l’horloge locale sauf si -attime est indiqué. La ligne depth affichée avec l’erreur indique de quel certificat il s’agit : 0 correspond à celui du serveur, les numéros supérieurs à des certificats intermédiaires.
Pourquoi cela se produit
Le certificat du serveur a expiré (profondeur 0)
fréquenteLe renouvellement a échoué, ou le certificat renouvelé n’a jamais été chargé par le serveur ou le répartiteur de charge.
Un certificat intermédiaire de la chaîne servie a expiré
occasionnelleD’anciens fichiers de chaîne continuent de livrer un certificat intermédiaire ou un certificat à signature croisée expiré après que l’AC est passée à une nouvelle chaîne ; remplacez la chaîne par la chaîne actuelle de l’AC.
L’horloge de la machine qui vérifie est en avance
occasionnelleUne horloge réglée dans le futur fait paraître expirés des certificats valides ; -attime aide à distinguer les problèmes d’horloge d’une véritable expiration.
Comment corriger l’erreur
- 1.
Identifier le certificat expiré
Lisez les lignes depth et notAfter ; -checkend indique si un fichier de certificat expire dans un nombre de secondes donné, ce qui est pratique pour la surveillance.
bash # The depth printed with the error identifies the certificate; s_client also prints notAfter echo | openssl s_client -connect api.example.com:443 -servername api.example.com 2>&1 | grep -E '^depth|verify error|notAfter' # Check a file, and whether it expires within 30 days (exit 1 = yes) openssl x509 -in server.pem -noout -enddate -checkend 2592000 - 2.
Vérifier à une date choisie
openssl verify -attime <unix time> montre si la chaîne était valide à ce moment-là, ce qui distingue l’expiration des autres erreurs.
bash # Would the chain verify at another moment? (useful to separate clock problems) openssl verify -attime "$(date -d '2025-02-01' +%s)" -CAfile root.pem server.pem - 3.
Renouveler et recharger
Renouvelez le certificat, rechargez le composant qui termine TLS, quel qu’il soit, et confirmez la nouvelle date d’expiration côté réseau.
bash sudo certbot renew && sudo systemctl reload nginx echo | openssl s_client -connect api.example.com:443 -servername api.example.com 2>/dev/null | openssl x509 -noout -enddate
Erreurs associées
curl: (60) SSL certificate problem: certificate has expiredcurl (OpenSSL backend)x509: certificate has expired or is not yet valid: current time 2026-08-20T15:4…Go crypto/x509[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has exp…Python ssl module (OpenSSL)certificate has expiredNode.js tls / https / fetch