Перейти к содержимому
ecdsa.com
GNU Wget built with GnuTLS (Debian)curl

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

ERROR: The certificate of 'api.example.com' has expired.

Сборки wget с GnuTLS выводят эту строку после общей строки «ERROR: The certificate of '<host>' is not trusted.» и перед «The certificate has expired». Сборки с OpenSSL выводят «ERROR: cannot verify <host>'s certificate, issued by '…':», а за ней «Issued certificate has expired.»

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

По часам этой машины дата notAfter сертификата сервера (или другого сертификата в его цепочке) уже прошла, и бэкенд GnuTLS в wget отказывается устанавливать соединение. CA доверенный; проверку не проходит только срок действия. wget завершается с кодом 5.

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

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

  1. 1.

    Проверьте даты сертификата, который сервер отдаёт на самом деле

    Сравните notAfter с текущим временем UTC. Если сервер отдаёт старый сертификат, хотя новый уже есть, значит, сервер его не подхватил.

    bash
    echo | openssl s_client -connect api.example.com:443 -servername api.example.com 2>/dev/null \
      | openssl x509 -noout -subject -startdate -enddate
  2. 2.

    Продлите сертификат и перезагрузите сервисы

    Продлите сертификат через ACME-клиент или CA, затем перезагрузите все сервисы, которые терминируют TLS для этого имени; автоматизируйте оба шага, чтобы следующее продление не зависело от того, вспомнит ли о нём кто-нибудь.

    bash
    sudo certbot renew --cert-name api.example.com
    sudo systemctl reload nginx     # or apache2 / haproxy: reload whatever terminates TLS
  3. 3.

    Исправьте время на клиенте

    Если с другой машины сертификат проходит проверку как действительный, включите NTP на той машине, где возникает ошибка.

    bash
    date -u
    timedatectl status
    sudo timedatectl set-ntp true

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

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