Сообщение об ошибке
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.
Почему это происходит
Сертификат не продлён
частоЗадание продления, которое перестало запускаться, проверка ACME, которая не проходит после изменения DNS или межсетевого экрана, или сертификат, установленный вручную, за которым никто не следил.
Продлённый сертификат лежит на диске, но сервер его не отдаёт
частоТочка терминирования TLS (nginx, Apache, HAProxy, балансировщик нагрузки или CDN) продолжает отдавать ранее загруженный сертификат, пока её не перезагрузят или не загрузят в неё новый сертификат.
Часы клиента показывают неверное время
иногдаМашина, часы которой сильно убежали вперёд, считает действительные сертификаты истёкшими. Встраиваемые платы без часов реального времени часто загружаются с неверной датой, пока не пройдёт синхронизация по NTP.
Как исправить
- 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.
Продлите сертификат и перезагрузите сервисы
Продлите сертификат через ACME-клиент или CA, затем перезагрузите все сервисы, которые терминируют TLS для этого имени; автоматизируйте оба шага, чтобы следующее продление не зависело от того, вспомнит ли о нём кто-нибудь.
bash sudo certbot renew --cert-name api.example.com sudo systemctl reload nginx # or apache2 / haproxy: reload whatever terminates TLS - 3.
Исправьте время на клиенте
Если с другой машины сертификат проходит проверку как действительный, включите NTP на той машине, где возникает ошибка.
bash date -u timedatectl status sudo timedatectl set-ntp true
Связанные ошибки
ERROR: The certificate of 'api.example.com' is not trusted.GNU Wget built with GnuTLS (Debian, Ubuntu before 22.04 used it too)curl: (60) SSL certificate problem: certificate has expiredcurl (OpenSSL backend)verify error:num=10:certificate has expiredOpenSSL CLI (openssl s_client / openssl verify)x509: certificate has expired or is not yet valid: current time 2026-08-20T15:4…Go crypto/x509