证书用 acme.sh 自动续签,日志里显示 renew success,浏览器访问正常,必应抓取却持续报证书过期,持续了三天。
这类报错背后常见的原因有几处,逐个排除就行。新证书写盘了但没有 reload Nginx,进程还在用旧证书。另一种情况是多台后端只在一台上跑了续签脚本。
另外,CDN 边缘节点缓存了旧证书。
先核对线上实际下发的证书有效期
openssl s_client -connect www.example.com:443 -servername www.example.com 2>/dev/null | openssl x509 -noout -dates
续签后自动重载服务
acme.sh --install-cert -d example.com --reloadcmd 'systemctl reload nginx'
然后逐台确认后端证书一致
for h in 10.0.0.1 10.0.0.2; do echo $h; done
刷新 CDN 证书
curl -sI https://www.example.com/ | head -3
同样的操作我在测试机上先走了一遍,线上只做验证过的部分。
这台环境是别人交接的,不少默认值被动过,只能一项项核。
同事提醒我看一下最近一次发布,时间点确实对得上。
别只看报错消失,验证要多做一步。重载后线上证书到期时间变成三个月后,必应的 SSL 报错在第二天消失。
续签成功不等于生效,证书文件换了必须 reload,脚本里把 reloadcmd 配上才不会漏。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
