证书实际还有十小时到期,监控按北京时间减了一次时区,提前八小时就发告警,值班的人半夜被叫起来。日志里能对上时间点,这种反而好排。
openssl 输出的 notAfter 是 GMT 时间,脚本直接当本地时间解析,东八区就多减了八小时。两个时间都没错,比较时基准不一致。这一点先确认清楚,后面就不用反复试。
openssl x509 -in cert.pem -noout -enddate openssl x509 -in cert.pem -noout -checkend 86400
「证书时间 UTC」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。
处理上按这个顺序:解析时统一转成 UTC 时间戳再比较,别用字符串直接减;在监控输出里同时打印原始 notAfter 和换算后的剩余小时数,方便核对;改完拿一张即将过期的测试证书验证告警时间点。
结果对不对很好判断,剩余时间与 openssl 输出一致,告警不再提前八小时触发。
