什么是 HSTS?
HSTS(HTTP Strict Transport Security)是一种网络安全策略机制,允许网站声明浏览器必须仅通过 HTTPS 连接访问。一旦服务器发送 Strict-Transport-Security 响应头,浏览器就会记住这个指令,在指定时间内(max-age)自动将所有 HTTP 请求转换为 HTTPS。
HSTS 响应头格式
|
|
参数说明
| 参数 | 说明 |
|---|---|
max-age |
浏览器记住该规则的时长,单位为秒。例如 31536000 代表一年 |
includeSubDomains |
可选指令,作用范围包含所有子域名 |
preload |
可选指令,表示该域名申请加入 HSTS 预加载列表 |
实际案例
查看主流网站的 HSTS 头配置:
|
|
输出示例:
|
|
验证多个网站
|
|
Nginx 配置 HSTS
在服务器配置中添加 HSTS 头:
|
|
多个子域名的配置
如果所有子域名都支持 HTTPS,建议加上 includeSubDomains:
|
|
注意:启用
includeSubDomains前确保所有子域名都已配置 HTTPS,否则子域名将无法通过 HTTP 访问。
HSTS 工作原理
- 首次访问:用户通过 HTTPS 访问网站,服务器返回 HSTS 头
- 浏览器记录:浏览器将域名加入 HSTS 列表,记录有效时长
- 后续访问:即使用户输入
http://或点击 HTTP 链接,浏览器自动转换为 HTTPS - 过期失效:超过 max-age 后,浏览器不再强制使用 HTTPS
HSTS 预加载列表
HSTS 预加载列表是内置在浏览器中的域名列表,这些域名强制使用 HTTPS。提交到预加载列表需要满足:
- 有效的 SSL/TLS 证书
- 所有子域名支持 HTTPS
- 在响应头中包含
preload指令 - 设置较长的 max-age(至少一年)
提交地址:https://hstspreload.org/
HSTS 的安全价值
防止协议降级攻击
阻止攻击者试图让用户使用不安全的 HTTP 连接。
防止 Cookie 劫持
确保 Cookie 始终通过加密通道传输,防止被窃取。
提升用户安全感
地址栏显示安全锁标志,增强用户信任。
注意事项
- 首次访问必须是 HTTPS:如果用户首次通过 HTTP 访问,HSTS 不会生效
- max-age 设置:建议至少设置 6 个月,长期站点可设置 1-2 年
- 谨慎使用 includeSubDomains:确保所有子域名都支持 HTTPS
- 证书问题:一旦证书失效,用户在 max-age 期间内将无法访问站点
查看浏览器中的 HSTS 域名
Firefox:
|
|
Chrome:
|
|
总结
HSTS 是提升 HTTPS 安全性的重要机制,通过强制浏览器使用加密连接,有效防止中间人攻击和协议降级攻击。生产环境建议启用,并考虑提交到预加载列表以获得更全面的保护。