首页/安全/加密与证书速查/证书尚未生效排查

证书尚未生效排查

报 certificate is not yet valid(错误码 9)多为服务器或客户端时钟漂移、签发时把本地时间误当 UTC 所致;校时并核对 notBefore 的 UTC 值即可定位。

加密与证书速查安全更新于 2026-10-13

证书尚未生效排查

报 certificate is not yet valid 说明当前时间早于证书的生效时间(notBefore)。常见原因是服务器或客户端时钟漂移、签发时把本地时间误当 UTC 写入、或虚拟机与容器长时间挂起后时间未同步。定位方法很直接:把系统的 UTC 时间与证书的生效、失效时间三者放在一起对比,就能判断是时间问题还是证书本身的问题。

基本信息

查看有效期openssl x509 -noout -startdate -enddate
系统校时Linux 用 timedatectl 与 chronyc,Windows 用 w32tm
容器注意容器时间常继承宿主,宿主漂移会波及全部容器
常见诱因签发模板写入了带时区偏移的时间值
错误表现部分库提示 not yet valid,或报告对应的错误码

典型使用场景

  • 新签发证书立刻使用就报错,多为生效时间或时钟问题
  • 容器与宿主机时间不一致导致的偶发失败
  • 跨时区团队协作时核对签发模板的时间写法
  • 虚拟机从休眠恢复后时间跳变引发的问题
  • 排查「只有部分客户端失败」:这些客户端时钟偏移更大

时间核对命令

时间核对命令
openssl x509 -in cert.pem -noout -startdate -enddate   # 证书生效与失效时间
openssl x509 -in cert.pem -noout -dates                 # 日期信息一览
date -u                                                 # 当前 UTC 时间
chronyc tracking | head -5                              # 时间同步状态
# 三者对比即可判断是证书问题还是时钟问题

Windows 校时

Windows 校时
w32tm /query /status     # 查看时间源与偏差
w32tm /resync            # 立即重新同步
# 域环境中时间源通常由域控提供,先确认与域控的连通性

时间相关命令

平台检查方式同步方式
Linuxdate -u、timedatectlsystemctl restart chronyd 或 chronyc makestep
Windowsw32tm /query /statusw32tm /resync
容器与宿主时间对比依赖宿主时间服务,不在容器内独立校时
应用侧日志统一记录 UTC 时间便于与证书时间直接对比
虚拟机休眠、容器长时间挂起后时钟漂移较常见。跨时区签发时若把本地时间直接写进证书模板,会造成证书在一段时间内不可用;签发流程统一使用 UTC,可以避免这一类问题。

易错点

  • 只重启客户端不检查服务端时间 → 问题反复出现,每次都要重新排查一遍
  • 签发模板里写入带时区偏移的时间值 → 证书短时间内不可用,或提前失效
  • 在容器内单独校时 → 与宿主时间不一致,反而引发更多异常
  • 忽略部分客户端的时钟偏差 → 只修好了一部分节点,问题仍然稀疏出现

数据来源与参考

  • RFC 5280 §4.1.2.5(时间格式)
  • OpenSSL 官方文档(x509)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌