跳到内容

🔒 HSTS Preload 资格检查

hstspreload.org 主要提交要求(HSTS 头、max-age 大于等于 1 年、includeSubDomains、preload、HTTP→HTTPS 重定向、www 子域名 HTTPS)将自动检查。

完全免费 无需注册 服务器处理 无日志 / 数据库 限速 5 种语言 深色模式

⚠️ 请求从 DevLab 服务器发起。不允许私有 IP 地址和 localhost。

📖 本诊断能告诉你什么

本诊断通过 HTTPS 建立连接,读取 Strict-Transport-Security 标头,判断 max-ageincludeSubDomainspreload 是否满足 preload 列表的要求。请注意,HSTS 能保护的只是第二次以后的访问:在浏览器收到该标头之前不会强制任何行为,因此首次明文请求仍可能被截获。填补这个缺口,正是 preload 列表的用途。

检查项 含义 未通过时的处理
max-age 过短 max-age 表示「在这么多秒内强制使用 HTTPS」。申请 preload 列表至少需要 31536000(1 年),实务上推荐 63072000(2 年)。若设得太短,期限一过用户就又回到可能走明文的状态。 不要一上来就设为 2 年,请按 300 → 86400 → 2592000 → 63072000 逐级提高。中途若发现 HTTPS 有问题,短值会很快过期,影响可控。确认所有子资源都能通过 HTTPS 加载后,再设为最终值。
轻率添加了 includeSubDomains 该指令会立即、无差别地对所有子域强制 HTTPS。若 legacy.example.com、内部工具或邮件点击统计域名仍是 HTTP,它们会立刻无法访问;而且规则被记在用户浏览器中,即使回滚服务器,也要等 max-age 过期才会恢复。 启用前请打开 DNS 区域,列出所有 A / CNAME,逐一确认能否通过 HTTPS 打开。通常一张通配符证书即可覆盖,但通配符不匹配多级子域(如 a.b.example.com),这类需要单独的证书。
看起来没有返回该标头 设置了却检测不到,主因有两个。(1) 加在了 HTTP(明文)响应上——RFC 6797 规定明文响应中的 HSTS 必须被忽略,加在 HTTP 跳转 HTTPS 的 301 响应上毫无意义。(2) nginx add_header 的继承被取消——只要下层 location 块中出现一条 add_header,上层块的所有 add_header 在该位置就全部失效。 正确做法是加在 HTTPS 的 200 响应上。nginx 请加上 alwaysadd_header … always;),使其在错误响应中也输出;并把同一行复制到每个含有 add_headerlocation 块,或用 include 引入公共文件。

启用 HSTS 后,一旦证书过期或不匹配,用户将无法绕过警告继续访问。这是规范预期的行为,也正因如此,监控证书自动续期是否中断变得尤为重要。若在开发机上误启用,Chrome 可在 chrome://net-internals/#hsts 中用 Delete domain security policies 单独解除。