certbot或管理面板显示续期成功,服务器上的fullchain.pem日期也更新了,浏览器却仍展示旧证书。新证书通常已经签发,卡住的是服务加载或公网入口。
最快的判断方法是比较序列号:一份从公网读取,一份从磁盘读取。两者是否一致,比反复刷新浏览器或再次强制续期更可靠。

不要只看浏览器缓存。直接对域名的443端口做TLS握手,输出主题、颁发者、序列号和有效期;分别测试带SNI的域名、IPv4和IPv6。若多次结果不一致,可能有多节点、CDN、负载均衡或DNS切换。
公网证书这样读:
1. openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -serial -dates
2. dig +short A example.com
3. dig +short AAAA example.com
4. 从外部网络再测一次
IPv4与IPv6返回不同序列号,说明流量进入了不同节点。多次请求结果不一致时,再查负载均衡或CDN。所有入口都返回旧序列号,继续查看服务器配置。

查看续期工具管理的证书清单,再从Nginx或其他服务的有效配置中找ssl_certificate和ssl_certificate_key。常见问题是续期更新了/etc/letsencrypt/live下的文件,而站点配置仍引用复制到其他目录的旧证书;也可能多个server块中默认站点先匹配。
服务器上这样对照:
1. certbot certificates
2. nginx -T | grep -n 'ssl_certificate'
3. openssl x509 -in /path/fullchain.pem -noout -serial -dates
4. 比较磁盘与公网序列号
磁盘与公网序列号不同,服务没有加载这份文件,或者配置指向了其他副本。两者一致而浏览器仍提示异常,再检查本地缓存、域名和访问入口。

Nginx不会为每个新连接重新读取磁盘证书。续期后需要成功reload才能让工作进程加载新文件。先运行nginx -t,确认通过后再systemctl reload nginx;reload失败要查看服务日志,不要直接restart掩盖配置错误。Certbot使用certonly时可配置deploy hook,只在真正续期后执行reload。
Nginx执行顺序:
1. sudo nginx -t
2. sudo systemctl reload nginx
3. systemctl status nginx --no-pager
4. journalctl -u nginx --since '10 minutes ago'
nginx -t不通过时不要reload,先修配置错误。reload成功后重新读取公网序列号;服务状态正常而序列号不变,说明TLS可能在前面的代理或其他节点终止。

如果公网序列号仍不同,确认TLS在哪一层终止。Cloudflare、CDN、云负载均衡、Ingress、HAProxy、容器内Nginx和宿主机Nginx都可能各持一份证书。更新源站不会自动更新边缘证书;更新A节点也不代表B节点完成。逐个入口和节点核对,不要只重载一台服务器。
仍是旧证书时检查:
-
确认DNS实际指向 -
确认TLS终止位置 -
逐节点比较序列号 -
检查IPv6是否落到旧节点
CDN提供证书时,更新源站证书不会改变边缘证书。多节点环境要逐台核对,尤其检查IPv6是否仍指向旧服务器。

把reload写入deploy hook后,先用dry-run或测试环境验证。部署流程应记录续期结果、配置校验、reload结果和公网证书序列号。失败时不要频繁强制续期,以免触发签发限制;先修路径、权限或入口,再用已有新证书完成加载。
自动续期至少包含:
1. certbot renew --dry-run
2. 配置 deploy-hook 而非无条件定时restart
3. 续期后公网读取序列号
4. 保留旧证书路径与回退配置
dry-run验证的是续期流程,不代表公网已经换证。真正续期后还要校验配置、执行reload,并从外部读取一次序列号。
一台服务器可以托管多个HTTPS站点,客户端会通过SNI告诉服务器要访问哪个域名。直接打开https://服务器IP时,Nginx可能返回默认证书或默认站点,证书名称也不会匹配IP。排查线上证书时应带上真实域名;需要指定某个节点,可使用curl --resolve固定IP,同时保留正确的Host和SNI。
-
新证书的磁盘路径、序列号和有效期。 -
服务配置测试与reload结果。 -
公网IPv4、IPv6及CDN入口返回的序列号。
已有新证书时,不要频繁强制续期。先修配置路径、权限或入口,避免无意义地消耗签发次数。




