为了追安全评分把域名提交到 HSTS preload,includeSubDomains 生效后,测试子域 test.example.com 用自签证书,Chrome 直接拒绝访问,连继续访问的按钮都没有。

原因不止一个,得分开看。preload 列表编译进浏览器,策略在本地生效,服务端删头也没用。也可能是includeSubDomains 覆盖所有层级,包括临时测试环境。

还有一种情况,提交后移除需要数月,各浏览器版本节奏不一致。

第一件事是在本地确认当前策略

curl -sI https://test.example.com | grep -i strict-transport

给测试子域签一张正式证书

certbot certonly --nginx -d test.example.com

等前面都确认过,再确认子域都能正常握手

for h in www test static; do echo | openssl s_client -connect $h.example.com:443 -servername $h.example.com 2>/dev/null | grep "Verify return"; done

同样的操作我在测试机上先走了一遍,线上只做验证过的部分。

这台环境是别人交接的,不少默认值被动过,只能一项项核。

别只看报错消失,验证要多做一步。三个子域的握手都返回 Verify return code: 0,Chrome 不再拦截,Search Console 里对应资源的抓取错误清零。

提醒一点。preload 是单向开关,提交前必须确认所有子域都有有效证书,包括那些临时开的测试环境。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189