证书报 ERR_CERT_DATE_INVALID
发布时间:2026-01-07 19:11       
更新时间:2026-01-08 00:30
ERR_CERT_DATE_INVALID 这个报错本身已经把话说明白了:证书过期,或者还没到生效时间,浏览器拒绝信任。处理方向就三个:续期、核对配置指向、清理客户端干扰。
## 先看证书的真实有效期
不依赖浏览器,直接在服务器上问:
openssl s_client -connect www.example.com:443 -servername www.example.com 2>/dev/null | openssl x509 -noout -dates
输出 notBefore 和 notAfter 两行,一眼判断是过期还是未生效。也别忘了 date 核一下服务器自身时间,系统时间跑偏会造成误判。多域名共用一张证书时,-servername 参数带上具体域名再查:不加的话,部分配置会返回默认站点的证书,结论就偏了。
## 续期并确认部署到位
用 certbot(基于 ACME 协议的证书自动管理工具)签发的站点,先演练 certbot renew --dry-run 确认续期链路通畅,正式续期执行 certbot renew 即可。手工购买的证书则到签发方重新签发,拿到新文件后替换 nginx 配置里 ssl_certificate 和 ssl_certificate_key 指向的文件。
这里有个高频坑:配置写的是绝对路径,替换时只更新了下载目录里的文件,线上读的还是旧文件。替换后 nginx -t && nginx -s reload,再用前面那条 openssl 命令复查有效期,看到新的 notAfter 才算完成。
自动续期本身也要体检:certbot renew 依赖 cron 或 systemd timer 触发,systemctl list-timers | grep certbot 确认调度还在,别到到期那天才发现续期任务早已失效。
## 客户端侧的两种干扰
服务器端明明换了新证书,个别电脑仍报过期,通常是两处缓存:浏览器缓存了旧的握手信息,清缓存或换隐私窗口验证;本机系统时间错误(快了好几年)会让有效证书被判为过期,校对时间后恢复正常。走 CDN 的站点还要注意边缘节点也持有证书副本,需要在控制台触发部署更新。手机与电脑结论不一致时,优先排查报错的设备,逐台排除,而不是急着回滚服务器配置。
证书过期属于完全可预防的故障:certbot 自动续期配上到期监控提醒,双保险就够用。手工管理的证书,到期日建议记进运维日历,提前两周更换。换证书的操作留好回滚路径:旧证书文件重命名保留而不是直接覆盖,出问题切回去只要一分钟。