证书尚未生效排查
报 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 # 立即重新同步
# 域环境中时间源通常由域控提供,先确认与域控的连通性时间相关命令
| 平台 | 检查方式 | 同步方式 |
|---|---|---|
| Linux | date -u、timedatectl | systemctl restart chronyd 或 chronyc makestep |
| Windows | w32tm /query /status | w32tm /resync |
| 容器 | 与宿主时间对比 | 依赖宿主时间服务,不在容器内独立校时 |
| 应用侧 | 日志统一记录 UTC 时间 | 便于与证书时间直接对比 |
虚拟机休眠、容器长时间挂起后时钟漂移较常见。跨时区签发时若把本地时间直接写进证书模板,会造成证书在一段时间内不可用;签发流程统一使用 UTC,可以避免这一类问题。