本文へスキップ
ecdsa.com
Go crypto/x509Go

エラーメッセージ

x509: certificate has expired or is not yet valid: current time 2026-08-20T15:47:41+03:00 is after 2026-08-19T12:47:41Z

2 つのタイムスタンプには、失敗ごとに実際の値が入ります。検証者の時計の時刻と、証明書の有効期間の境界です。「is after」は期限切れを、「is before」は有効期間の開始前であることを意味します。

Go crypto/x509 — CertificateInvalidError (Expired)

このエラーの意味

検証時刻が、証明書の有効期間 [NotBefore, NotAfter] から外れています。Go はメッセージの中で比較の両側を示すため、このエラーは診断結果を自ら含む数少ないエラーの 1 つです。2 つのタイムスタンプを読み、証明書の日時と時計のどちらが間違っているかを確認してください。

発生する理由

修正方法

  1. 1.

    実際に返されている証明書の日付を確認する

    エンドポイントが今まさにどの証明書を返しているかを確認してください。更新後の「期限切れ」は、多くの場合「新しい証明書は存在するが、返されていない」ことを意味します。ディスク上の日付と通信上の日付が異なる場合は、TLS を終端しているプロキシをリロードまたは再起動してください。

    bash
    echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
      | openssl x509 -noout -dates
    # notBefore=...  notAfter=...
  2. 2.

    時刻同期を修正して監視する

    「is before」のケースでは、時計を修正し、正しい状態を維持してください。証明書の検証は、ローカルの時刻が正確であってはじめて正しく機能します。

    bash
    timedatectl status            # NTP active?
    sudo timedatectl set-ntp true
  3. 3.

    更新を自動化し、残りの有効期間をアラートで監視する

    有効期間の 2/3 が経過した時点で更新し(certbot のデフォルト)、有効期限はホストの外部から監視してください。ecdsa.com のドメイン署名診断(Signature Health)は、まさにこの点(チェーン、日付、有効期間の短縮に関する新しいルール)を評価し、有効期限のアラートを無料で送信します。

関連するエラー

署名エラーデータベースをすべて見る