检查

HSTS 检查

检查网站的 Strict-Transport-Security 响应头,以及它是否满足浏览器 HSTS 预加载列表的要求。

最后核实

HSTS 检查会通过 HTTPS 访问网站,显示它的 Strict-Transport-Security 响应头。输入域名,点 检查 HSTS,工具会解析 max-age、includeSubDomains 和 preload,并逐项对照浏览器预加载列表的要求。

怎么用

  1. 输入域名,比如 example.com。建议测主域名,预加载是按注册域名提交的。
  2. 点 检查 HSTS。
  3. 修改不满足的项,再测一次。

HSTS 的作用

浏览器通过 HTTPS 收到有效的 HSTS 头后,会在 max-age 秒内记住这个主机只能走 HTTPS:输入 http:// 会在发请求之前就被改成 HTTPS,证书出错时也不能再点“继续访问”。includeSubDomains 把规则扩展到所有子域名。

典型的响应头:

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

预加载的要求

HSTS 预加载列表编译在 Chrome、Firefox、Safari、Edge 里,用户第一次访问就走 HTTPS。要被接受,需要:

  1. 证书有效;
  2. HTTP 跳转到同一主机的 HTTPS;
  3. 所有子域名都支持 HTTPS;
  4. 主域名的 HSTS 头 max-age 不小于 31536000,并包含 includeSubDomains 和 preload。

用宝塔面板时,可以在网站的配置文件里加上 HSTS 响应头。TLS 配置生成器可以生成 Nginx、Apache、IIS、Tomcat 等服务器的 HSTS 配置。开启 HSTS 之前,先用混合内容扫描确认页面里没有 http:// 资源。

常见问题

max-age 设多少合适?

先设一个小值(比如 300 秒),确认所有页面和子域名在 HTTPS 下都正常,再逐步调大。长期值一般是一年(31536000)或两年(63072000),加入预加载列表至少要一年。

预加载能撤销吗?

能,但很慢。可以在 hstspreload.org 申请移除,但要随新版浏览器发布才生效,老版本用户会一直保留。提交前务必确认所有子域名(包括只在内网用、但挂在公网域名下的)都支持 HTTPS。

HTTP 响应里也要加 HSTS 头吗?

浏览器会忽略通过明文 HTTP 收到的 Strict-Transport-Security。在 HTTPS 响应里加,并把 HTTP 跳转到 HTTPS 即可。

资料来源

  1. RFC 6797: HTTP Strict Transport Security
  2. HSTS 预加载列表提交
  3. MDN: Strict-Transport-Security