Mensaje de error
ERROR: The certificate of 'api.example.com' has expired.
Las compilaciones de wget con GnuTLS imprimen esta línea después del mensaje genérico «ERROR: The certificate of '<host>' is not trusted.» y antes de «The certificate has expired». Las compilaciones con OpenSSL imprimen «ERROR: cannot verify <host>'s certificate, issued by '…':» seguido de «Issued certificate has expired.»
Qué significa
Según el reloj de este equipo, el certificado del servidor (u otro certificado de su cadena) ha superado su fecha notAfter, y el wget compilado con GnuTLS rechaza la conexión. La CA es de confianza; lo único que falla es el período de validez. wget termina con el código de salida 5.
Por qué ocurre
El certificado no se renovó
frecuenteUna tarea de renovación que dejó de ejecutarse, un desafío ACME que falla tras un cambio de DNS o de firewall, o un certificado instalado a mano del que nadie llevaba el control.
El certificado renovado está en disco, pero no se sirve
frecuenteEl servicio que termina TLS (nginx, Apache, HAProxy, un balanceador de carga o una CDN) sigue sirviendo el certificado que cargó antes hasta que se recarga o hasta que se sube el nuevo.
El reloj del cliente es incorrecto
ocasionalUn equipo con el reloj muy adelantado ve como caducados certificados que son válidos. Las placas embebidas sin reloj en tiempo real suelen arrancar con una fecha incorrecta hasta que NTP sincroniza la hora.
Cómo solucionarlo
- 1.
Comprobar las fechas del certificado que se sirve realmente
Compara notAfter con la hora UTC actual. Si el certificado servido es el antiguo, pero existe uno más reciente, el servidor no lo ha cargado.
bash echo | openssl s_client -connect api.example.com:443 -servername api.example.com 2>/dev/null \ | openssl x509 -noout -subject -startdate -enddate - 2.
Renovar y recargar
Renueva con tu cliente ACME o tu CA y después recarga todos los servicios que terminan TLS para ese nombre; automatiza ambos pasos para que la próxima renovación no dependa de que alguien se acuerde.
bash sudo certbot renew --cert-name api.example.com sudo systemctl reload nginx # or apache2 / haproxy: reload whatever terminates TLS - 3.
Corregir la hora del cliente
Si el certificado es válido cuando se comprueba desde otro equipo, activa NTP en el que falla.
bash date -u timedatectl status sudo timedatectl set-ntp true
Errores relacionados
ERROR: The certificate of 'api.example.com' is not trusted.GNU Wget built with GnuTLS (Debian, Ubuntu before 22.04 used it too)curl: (60) SSL certificate problem: certificate has expiredcurl (OpenSSL backend)verify error:num=10:certificate has expiredOpenSSL CLI (openssl s_client / openssl verify)x509: certificate has expired or is not yet valid: current time 2026-08-20T15:4…Go crypto/x509