事情本身不复杂,线索都在日志里。站点证书还有半年有效期,但链里的中间证书 30 天前过期。Chrome 靠缓存和 AIA 补链仍能打开,Googlebot 新建连接时报 SSL handshake failed,抓取量掉了四成。试过重启 Nginx,无效。
第一反应是「蜘蛛不抓 AIA,链不完整就直接失败」,验证下来不成立。
这类报错背后常见的原因有几处,逐个排除就行。服务器只配了站点证书,中间证书没有打进 fullchain。少数情况下是浏览器会缓存旧链或通过 AIA 自动补链,掩盖了问题。
少数情况下是不同 CDN 节点缓存的证书链版本不一致。
拉取完整链看每一张的有效期
openssl s_client -connect www.example.com:443 -showcerts </dev/null 2>/dev/null | openssl x509 -noout -dates
接着确认服务器配置的是 fullchain
grep -n 'ssl_certificate ' /etc/nginx/conf.d/site.conf
再往下换成包含中间证书的链文件
cat /etc/letsencrypt/live/example.com/cert.pem /etc/letsencrypt/live/example.com/chain.pem > /etc/nginx/ssl/fullchain.pem
复验链里证书数量
openssl s_client -connect www.example.com:443 -showcerts </dev/null 2>/dev/null | grep -c 'BEGIN CERTIFICATE'
改完先别撤,确认这几项。链里三张证书都在有效期内,openssl 校验返回 verify return code 0,抓取量在两天后回到原水平。
证书过期告警要盯整条链,不只看站点证书,中间证书的到期时间往往没人管。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
