Saltar al contenido
ecdsa.com
OpenSSL CLI (openssl s_client / openssl verify)CLI de OpenSSL

Mensaje de error

verify error:num=10:certificate has expired

También se muestra como

  • error 10 at 0 depth lookup: certificate has expired
  • Verify return code: 10 (certificate has expired)

s_client imprime «verify error:num=10:certificate has expired» seguido de «notAfter=…»; openssl verify imprime «error 10 at <depth> depth lookup: certificate has expired». Los certificados que aún no son válidos dan el error 9, «certificate is not yet valid».

OpenSSL CLI (openssl s_client / openssl verify) — X509_V_ERR_CERT_HAS_EXPIRED

Qué significa

Error 10 de OpenSSL (X509_V_ERR_CERT_HAS_EXPIRED): un certificado de la cadena tiene una fecha notAfter pasada respecto al momento de la verificación, que es la hora del reloj local salvo que se indique -attime. La línea de profundidad que se imprime junto con el error indica de qué certificado se trata: 0 es el propio del servidor; los números más altos son intermedios.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Identificar el certificado caducado

    Lee las líneas de profundidad y notAfter; -checkend indica si un archivo de certificado caduca dentro de un número de segundos dado, algo útil para la monitorización.

    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. 2.

    Verificar en un momento elegido

    openssl verify -attime <unix time> muestra si la cadena era válida en ese momento, lo que separa la caducidad de otros errores.

    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. 3.

    Renovar y recargar

    Renueva el certificado, recarga lo que termine TLS y confirma la nueva fecha de caducidad desde el lado de la red.

    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

Errores relacionados

Explorar toda la base de datos de errores de firma