Pular para o conteúdo
ecdsa.com
OpenSSL CLI (openssl s_client / openssl verify)CLI do OpenSSL

Mensagem de erro

verify error:num=10:certificate has expired

Também aparece como

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

O s_client imprime “verify error:num=10:certificate has expired” seguido de “notAfter=…”; o openssl verify imprime “error 10 at <depth> depth lookup: certificate has expired”. Certificados que ainda não são válidos geram o erro 9, “certificate is not yet valid”.

OpenSSL CLI (openssl s_client / openssl verify) — X509_V_ERR_CERT_HAS_EXPIRED

O que significa

Erro 10 do OpenSSL (X509_V_ERR_CERT_HAS_EXPIRED): um certificado da cadeia tem a data notAfter no passado em relação ao momento da verificação, que é o relógio local, a menos que -attime seja informado. A linha de profundidade (depth) impressa junto com o erro indica qual é o certificado: 0 é o do próprio servidor; números maiores são intermediários.

Por que acontece

Como corrigir

  1. 1.

    Identificar o certificado expirado

    Leia as linhas de profundidade (depth) e notAfter; o -checkend informa se um arquivo de certificado expira dentro de um determinado número de segundos, o que é útil para monitoramento.

    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 em um momento escolhido

    O openssl verify -attime <unix time> mostra se a cadeia era válida naquele momento, separando a expiração de outros erros.

    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 e recarregar

    Renove o certificado, recarregue o que quer que faça a terminação do TLS e confirme pela rede a nova data de expiração.

    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

Erros relacionados

Ver toda a base de erros de assinatura