首页/网络/抓包与流量分析速查/证书有效期与过期判读
应用层报文判读71 条

证书有效期与过期判读

证书 notBefore/notAfter 决定可用窗口:抓包取到的证书显示已过期或尚未生效时,客户端报错与时间窗口直接对应。

证书有效期怎么判

每张 X.509 证书都带有生效时间与失效时间,客户端校验时会拿本机当前时间去比对这两个边界,落在区间外就拒绝连接。抓包取到的证书可以直接看到这两个时间:当报错内容莫名其妙却又怀疑证书时,先看证书时间窗口是否覆盖当下,再排查链与信任问题,能省掉大量来回猜测。

基本信息

抓包字段证书树中的有效期字段,Wireshark 中显示为 notBefore 与 notAfter
过滤表达式tls.handshake.certificate 或按握手类型定位证书消息
判据把当前时间与 notBefore、notAfter 比对,越界即为过期或尚未生效
必要前提抓包机时钟必须可信,否则比对结论不可靠
常见关联链上中间证书过期同样会导致校验失败
旁证手段用 openssl s_client 主动连一次可看到客户端视角的校验结果

典型使用场景

  • 报错定位:客户端报证书无效,直接用抓包里的时间窗口确认是否过期
  • 轮换核对:新旧证书交替期间,确认服务端实际下发的是哪一张
  • 多端差异:同一域名在不同客户端表现不同,比较两端拿到的证书是否一致
  • 时钟排查:证书尚未生效的报错,多数是客户端时钟落后而不是证书有问题
  • 变更验证:换上新年证书后抓包确认已生效下发,避免灰度期遗漏节点

查看证书时间

查看证书时间
# 定位证书消息(握手类型 11)
tshark -r a.pcap -Y 'tls.handshake.type == 11' -T fields -e frame.number -e ip.src | head
tshark -r a.pcap -Y 'tls.handshake.certificate' -V | grep -i 'not before\|not after\|validity'
# 也可从响应体角度确认服务端下发的证书数量(常见为链)
tshark -r a.pcap -Y 'tls.handshake.type == 11' -T fields -e frame.number -e x509sat.printableString | head -20
# 主动旁证: 从客户端视角看校验结果(需网络可达)
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>&1 | grep -i 'verify\|notAfter'

现象与推断

现象含义下一步
notAfter 早于当前时间证书已过期确认服务端是否漏换证书
notBefore 晚于当前时间证书尚未生效优先怀疑客户端时钟落后
时间窗口正常仍报错问题在信任链或主机名检查链完整性、根证书与域名
链上中间证书过期部分客户端严格校验链替换整链而非只换叶证书
各节点下发不同证书灰度或负载不均逐节点核对部署状态
客户端时钟错误同样会报证书过期:本机时间被拨快几年,任何证书都显示过期。排查顺序是先对时,再查证书窗口。
证书轮换窗口期内新旧证书可能并存,抓包时按服务端地址区分不同节点,避免拿 A 节点的证书去解释 B 节点的报错。

易错点

  • 看到证书过期就断定服务端疏漏,忽略客户端时钟错误这一常见原因,先去对时再谈换证
  • 只核对叶证书时间而漏了链上中间证书,客户端仍然校验失败,问题反复出现
  • 在时钟未同步的分析主机上比对有效期,结论本身不可信
  • 轮换期间混用不同节点的抓包做判断,把并存状态误读为「证书时有时无」

数据来源与参考

  • RFC 5280
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌