Mensaje de error
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
Las dos marcas de tiempo se rellenan en cada fallo: el reloj del verificador y el límite del certificado. «is after» significa caducado; «is before», aún no válido.
Go crypto/x509 — CertificateInvalidError (Expired)
Qué significa
El momento de la verificación queda fuera de la ventana [NotBefore, NotAfter] del certificado. Go indica en el mensaje los dos lados de la comparación, lo que convierte este error en uno de los pocos que traen su propio diagnóstico: lee las dos marcas de tiempo y mira cuál es la incorrecta, la del certificado o la del reloj.
Por qué ocurre
La renovación automática dejó de funcionar
frecuenteUn temporizador de certbot que se detuvo, una cuenta ACME que perdió la autorización o un balanceador de carga que sirve un certificado antiguo después de que la renovación se completara en otro lugar. Ahora que la vida útil máxima de los certificados públicos se reduce hasta 47 días de aquí a 2029, renovar a mano ya no es viable.
El reloj del equipo que verifica es incorrecto
frecuenteLos fallos «is before» en dispositivos recién arrancados (Raspberry Pi sin RTC, máquinas virtuales restauradas desde instantáneas, hardware IoT) suelen significar que el reloj marca 1970 o el mes pasado; entonces todos los certificados vigentes parecen aún no válidos o caducados.
Desfase del reloj en el límite de validez
ocasionalUn certificado emitido hace unos segundos (NotBefore = ahora) que verifica un host con el reloj un minuto atrasado falla como aún no válido; con los certificados de corta duración de una malla de servicios es fácil caer en esa ventana.
Cómo solucionarlo
- 1.
Leer las fechas reales del certificado servido
Confirma qué certificado sirve el endpoint en este momento: tras una renovación, «caducado» suele significar «el certificado nuevo existe, pero no se está sirviendo». Recarga o reinicia el proxy que termina TLS si las fechas del disco y las que viajan por la red no coinciden.
bash echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \ | openssl x509 -noout -dates # notBefore=... notAfter=... - 2.
Corregir y vigilar la sincronización de la hora
En los casos «is before», corrige el reloj y mantenlo en hora; la validación de certificados solo es tan fiable como la hora local.
bash timedatectl status # NTP active? sudo timedatectl set-ntp true - 3.
Automatizar la renovación y alertar según la vida útil restante
Renueva al llegar a 2/3 de la vida útil (el valor predeterminado de certbot) y vigila la caducidad desde fuera del host. Nuestra comprobación de estado de dominios, Signature Health, evalúa exactamente esto —la cadena, las fechas y las nuevas reglas de vida útil más corta— con alertas de caducidad gratuitas.