检查
HSTS 检查
检查网站的 Strict-Transport-Security 响应头,以及它是否满足浏览器 HSTS 预加载列表的要求。
HSTS 检查会通过 HTTPS 访问网站,显示它的 Strict-Transport-Security 响应头。输入域名,点 检查 HSTS,工具会解析 max-age、includeSubDomains 和 preload,并逐项对照浏览器预加载列表的要求。
怎么用
- 输入域名,比如
example.com。建议测主域名,预加载是按注册域名提交的。 - 点 检查 HSTS。
- 修改不满足的项,再测一次。
HSTS 的作用
浏览器通过 HTTPS 收到有效的 HSTS 头后,会在 max-age 秒内记住这个主机只能走 HTTPS:输入 http:// 会在发请求之前就被改成 HTTPS,证书出错时也不能再点“继续访问”。includeSubDomains 把规则扩展到所有子域名。
典型的响应头:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
预加载的要求
HSTS 预加载列表编译在 Chrome、Firefox、Safari、Edge 里,用户第一次访问就走 HTTPS。要被接受,需要:
- 证书有效;
- HTTP 跳转到同一主机的 HTTPS;
- 所有子域名都支持 HTTPS;
- 主域名的 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 即可。