エラーメッセージ
ERROR: The certificate of 'api.example.com' has expired.
GnuTLS でビルドされた wget は、この行を、汎用的な「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 の日付を過ぎているため、wget の GnuTLS バックエンドが接続を拒否しています。CA は信頼されており、問題は有効期間だけです。wget は終了ステータス 5 で終了します。
発生する理由
証明書が更新されていない
よくある実行されなくなった更新ジョブ、DNS やファイアウォールの変更後に失敗する ACME チャレンジ、誰も管理していなかった手動インストールの証明書などです。
更新した証明書はディスクにあるが、返されていない
よくある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