跳到主要内容
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

两个时间戳随每次失败而填入:验证方的时钟时间和证书的有效期边界。“is after”表示已过期;“is before”表示尚未生效。

Go crypto/x509 — CertificateInvalidError (Expired)

含义

验证时间落在证书的 [NotBefore, NotAfter] 区间之外。Go 在消息中给出了比较的双方,因此这是少数自带诊断信息的错误之一:看一看这两个时间戳,判断哪一个有问题——是证书的,还是时钟的。

原因

修复方法

  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 的默认设置),并从主机外部监控到期情况。我们的域名签名健康检查(Signature Health)评估的正是这些——证书链、日期以及缩短有效期的新规则——并免费提供到期提醒。

相关错误

浏览完整的签名错误库