Mensaje de error
invalid peer certificate: certificate expired: verification time
Forma completa: «invalid peer certificate: certificate expired: verification time <unix> (UNIX), but certificate is not valid after <unix> (<n> seconds ago)». Las versiones anteriores de rustls solo imprimían el nombre de la variante («invalid peer certificate: Expired»). Los certificados que aún no son válidos producen otra variante, «not valid yet».
rustls 0.23 (via reqwest, ureq, hyper-rustls) — CertificateError::ExpiredContext
Qué significa
rustls verificó la cadena, pero en el momento de la verificación uno de sus certificados ya había pasado su fecha notAfter. rustls 0.23 indica ambos instantes como marcas de tiempo Unix y cuántos segundos hace que caducó el certificado, lo que te dice de inmediato si el problema está en el certificado o en el reloj.
Por qué ocurre
El certificado del servidor caducó
frecuenteLa renovación falló o el certificado renovado aún no se sirve.
El reloj del cliente está mal
ocasionalLos dispositivos embebidos y los contenedores en hosts sin NTP pueden ir muy desfasados; compara la hora de verificación que indica el mensaje con la hora real.
Un certificado caducado fijado como ancla de confianza
raraLos clientes que añaden el propio certificado del servidor como raíz siguen validando contra ese certificado antiguo aunque el servidor ya lo haya renovado.
Cómo solucionarlo
- 1.
Convertir las marcas de tiempo
date -u -d @<seconds> convierte ambos valores en horas UTC legibles.
bash # The message gives both instants as Unix seconds date -u -d @1743465600 # certificate's notAfter date -u # this machine's time - 2.
Renovar y volver a desplegar
Renueva el certificado del servidor, recarga el servicio y confirma la nueva fecha de fin desde el lado de la red.
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