巡检脚本只检查证书到期时间 还有 30 天就报正常 但证书是给 example.com 签的 实际访问 www.example.com 部分老客户端握手失败 蜘蛛抓取报证书域名不匹配 巡检一直是绿的
一开始怀疑是「SNI 配置错误 返回了默认站点的证书」,查了一圈,方向不对。
原因不止一个,得分开看。巡检只读 notAfter 没有校验 SAN 列表。也可能是证书覆盖的域名与访问域名不一致。
另外,中间证书缺失导致部分客户端不信任。
上来先读出证书覆盖的域名
echo | openssl s_client -connect www.example.com:443 -servername www.example.com 2>/dev/null | openssl x509 -noout -text | grep -A1 'Subject Alternative Name'
校验访问域名是否在 SAN 里
openssl s_client -connect www.example.com:443 -servername www.example.com </dev/null 2>/dev/null | openssl x509 -checkhost www.example.com
随后换成包含两个域名的证书
certbot certonly -d example.com -d www.example.com
复验证书链与域名
curl -sI https://www.example.com | head -3
白天有业务在跑,能验证的部分都压到了晚上做。
改完先别撤,确认这几项。证书 SAN 覆盖实际访问域名 链完整 各客户端握手成功 巡检不再误报正常。
补一句。到期时间只是证书的一项 域名覆盖和链完整同样会让握手失败 三项一起查才叫巡检。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
