Перейти к содержимому
ecdsa.com
OpenSSL CLI (openssl s_client / openssl verify)OpenSSL CLI

Сообщение об ошибке

verify error:num=10:certificate has expired

Также выводится как

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

s_client выводит «verify error:num=10:certificate has expired», а затем «notAfter=…»; openssl verify выводит «error 10 at <depth> depth lookup: certificate has expired». Для сертификатов, которые ещё не действительны, выдаётся ошибка 9 — «certificate is not yet valid».

OpenSSL CLI (openssl s_client / openssl verify) — X509_V_ERR_CERT_HAS_EXPIRED

Что это означает

Ошибка OpenSSL 10 (X509_V_ERR_CERT_HAS_EXPIRED): у одного из сертификатов цепочки дата notAfter уже в прошлом относительно момента проверки, а это время локальных часов, если не задан -attime. Строка depth, которая выводится вместе с ошибкой, показывает, о каком сертификате речь: 0 — собственный сертификат сервера, номера больше — промежуточные.

Почему это происходит

Как исправить

  1. 1.

    Определите просроченный сертификат

    Посмотрите строки depth и notAfter; -checkend показывает, истечёт ли срок действия сертификата из файла в течение заданного числа секунд, и это удобно для мониторинга.

    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.

    Проверьте на выбранный момент времени

    openssl verify -attime <unix time> показывает, была ли цепочка действительна в этот момент, и так отделяет истечение срока действия от других ошибок.

    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.

    Продлите сертификат и перезагрузите конфигурацию

    Продлите сертификат, перезагрузите всё, что терминирует TLS, и проверьте новую дату окончания срока действия со стороны сети.

    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

Связанные ошибки

Открыть всю базу ошибок подписей