エラーメッセージ
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)