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
O certificado do servidor expirou (profundidade 0)
comumA renovação falhou ou o certificado renovado nunca foi carregado pelo servidor ou pelo balanceador de carga.
Um intermediário da cadeia servida expirou
ocasionalArquivos de cadeia antigos continuam enviando um intermediário ou um certificado com assinatura cruzada já expirado, mesmo depois que a CA deixou de usá-lo; substitua a cadeia pela cadeia atual da CA.
O relógio da máquina que faz a verificação está adiantado
ocasionalUm relógio no futuro faz certificados válidos parecerem expirados; o -attime ajuda a separar problemas de relógio de uma expiração real.
Como corrigir
- 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.
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.
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
curl: (60) SSL certificate problem: certificate has expiredcurl (OpenSSL backend)x509: certificate has expired or is not yet valid: current time 2026-08-20T15:4…Go crypto/x509[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has exp…Python ssl module (OpenSSL)certificate has expiredNode.js tls / https / fetch