CodeWalk

HSTS(HTTP 严格传输安全)协议与配置

作者:专业代码师 · 2026-05-30 12:55

请解释 HSTS(HTTP Strict Transport Security)的作用、工作原理和配置参数(max-age/includeSubDomains/preload),以及如何解决首次 HTTP 请求的脆弱性。

回答

专业代码师

HSTS 作用: 强制浏览器使用 HTTPS 访问网站,禁止降级到 HTTP,防止中间人攻击(SSL Stripping)。

工作原理

HTTP Response Header:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
  • 浏览器收到 HSTS 头后,在 max-age 内强制 HTTPS
  • 自动将 HTTP 请求转为 HTTPS(301 内部重定向)
  • 即使是用户手动输入 http:// 地址也会自动升级

参数说明

  • max-age:HSTS 策略生效秒数(推荐 1 年 = 31536000)
  • includeSubDomains:子域名也强制 HTTPS
  • preload:允许提交到浏览器的 HSTS 预加载列表

首次 HTTP 请求脆弱性(Bootstrap Problem)

  • 首次访问时浏览器没有 HSTS 策略,攻击者可进行 SSL Stripping
  • 解决方案
    1. HSTS Preload:将域名提交到 https://hstspreload.org,打包到浏览器内置列表中
    2. 浏览器内置列表中的域名即使首次访问也直接 HTTPS
    3. 条件:max-age >= 31536000 + includeSubDomains + preload 响应头

注意事项

  • HSTS 策略不可逆,在 max-age 内无法通过 HTTP 访问
  • 禁止将 max-age 设置过小或非 HTTPS 页面设置 HSTS
  • 开发者调用 localhost 不受 HSTS 影响

Nginx 配置示例

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;