Сообщение об ошибке
state=error: certificate verify failed (certificate has expired)
Также выводится как
- OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 peeraddr=127.0.0.1:8443 state=error: certificate verify failed (certificate has expired)
Полное сообщение: «SSL_connect returned=1 errno=0 peeraddr=<ip>:<port> state=error: certificate verify failed (certificate has expired)». Для сертификатов, срок действия которых ещё не начался, выводится «(certificate is not yet valid)».
Ruby openssl (Net::HTTP, Faraday, RubyGems) — OpenSSL::SSL::SSLError from SSL_connect
Что это означает
OpenSSL нашёл в цепочке сертификат, срок действия которого закончился раньше текущего времени на машине, где работает Ruby. Чаще всего сертификат сервера не продлили или после продления новый сертификат не развернули; на старых системах устаревший пакет сертификатов CA может заставить OpenSSL построить путь через корневой сертификат с истёкшим сроком действия.
Почему это происходит
Истёк срок действия сертификата сервера
частоПродление не удалось, или после продления сервис не перезагрузили.
Устаревший пакет сертификатов CA на старой системе
иногдаДолгоживущие образы и серверы, на которых пакет ca-certificates ни разу не обновлялся, могут знать только просроченные версии публичных корневых сертификатов.
Системные часы идут неправильно
иногдаЕсли часы ушли вперёд, действительные сертификаты выглядят просроченными.
Как исправить
- 1.
Проверьте, до какой даты действует отдаваемый сертификат
Если эта дата уже прошла, продлите сертификат; если с ней всё в порядке, проверьте пакет сертификатов и часы клиента.
bash echo | openssl s_client -connect api.example.com:443 -servername api.example.com 2>/dev/null \ | openssl x509 -noout -subject -enddate - 2.
Обновите пакет сертификатов CA на клиенте
Обновление пакета ca-certificates устраняет ошибку у клиентов, которые строят путь через выведенные из обращения корневые сертификаты.
bash # Old images: refresh the CA bundle Ruby's OpenSSL uses apt-get update && apt-get install --only-upgrade -y ca-certificates ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE' - 3.
Продлите сертификат и перезагрузите конфигурацию сервера
Продлите сертификат и перезагрузите конфигурацию узла, который терминирует TLS; затем проверьте результат со стороны сети.
bash sudo certbot renew && sudo systemctl reload nginx
Связанные ошибки
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/x509state=error: certificate verify failed (unable to get local issuer certificate)Ruby openssl (Net::HTTP, Faraday, HTTParty, RubyGems)