HTTP严格传输安全协议到底有啥用?HSTS协议配置教程
- 云服务器
- 2026-07-05
- 7
HTTP 严格传输安全协议(HSTS, HTTP Strict Transport Security)是一种 Web 安全机制,旨在强制浏览器与服务器之间的通信始终通过加密的 HTTPS 协议进行,从而防止中间人攻破、协议降级攻破以及 Cookie 截持等安全威胁。
核心功能与作用
HSTS 的主要目的是解决 HTTPS 网站在首次访问时可能面临的安全风险,当用户第一次访问一个支持 HTTPS 的网站时,如果直接输入 http:// 或点击了未加密的链接,浏览器会发起一个 HTTP 请求,攻破者可以在网络链路中拦截这个请求,将其重定向到恶意服务器,或者利用 SSL 剥离攻破(SSL Stripping)强制用户在不加密的连接下浏览网站。
HSTS 通过服务器向浏览器发送特定的响应头,告知浏览器:“对于该域名,在未来的一段时间内,所有访问都必须使用 HTTPS,即使你尝试访问 HTTP 版本,也要自动转换为 HTTPS。”
工作原理详解
HSTS 的工作流程主要依赖于 HTTP 响应头中的 Strict-Transport-Security 字段,以下是其运作机制的关键步骤:

- 首次 HTTPS 访问:用户首次通过 HTTPS 访问网站。
- 服务器发送 HSTS 头:服务器在响应中包含 Strict-Transport-Security 头,指定最大有效期(max-age)和其他策略。
- 浏览器缓存策略:浏览器接收到该头后,会将该域名及其策略存储在本地数据库中。
- 后续访问强制加密:在 max-age 有效期内,无论用户输入的是 http:// 还是 https://,浏览器都会自动将请求转换为 https:// 并发起请求,如果服务器不支持 HTTPS,浏览器将拒绝连接并显示错误。
HSTS 响应头参数解析
Strict-Transport-Security 头包含以下关键参数,它们共同决定了 HSTS 的行为:
| 参数名 | 说明 | 示例值 |
|---|---|---|
| max-age | 必需参数,指定浏览器应将此策略保持多久(以秒为单位)。 | max-age=31536000 (1年) |
| includeSubDomains | 可选参数,如果存在,策略将应用于所有子域名。 | includeSubDomains |
| preload | 可选参数,允许网站申请加入浏览器的 HSTS 预加载列表。 | preload |
为什么需要 HSTS?
- 防止协议降级攻破:攻破者可能尝试将 HTTPS 连接降级为 HTTP,以窃听数据或载入恶意代码,HSTS 确保浏览器不会接受这种降级。
- 消除首次访问风险:解决了用户首次访问网站时因使用 HTTP 而暴露于风险的问题。
- 保护 Cookie 安全:防止攻破者通过 HTTP 连接窃取用户的会话 Cookie。
- 提升用户体验与安全性:自动重定向到 HTTPS,用户无需手动输入 https://,同时确保通信加密。
如何启用 HSTS?
服务器管理员需要在 Web 服务器配置中添加 Strict-Transport-Security 响应头,以下是常见 Web 服务器的配置示例:
-
Nginx:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
-
Apache:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" -
IIS:
在 web.config 中添加:
<system.webServer> <httpProtocol> <customHeaders> <add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" /> </customHeaders> </httpProtocol> </system.webServer>
HSTS 预加载列表(HSTS Preload List)
为了进一步消除首次访问的风险,浏览器厂商(如 Chrome、Firefox、Safari)维护了一个 HSTS 预加载列表,网站可以申请加入此列表,一旦加入,浏览器在出厂时或更新时就会内置该域名的 HSTS 策略,这意味着,即使用户是第一次访问该网站,浏览器也会自动使用 HTTPS,无需等待服务器响应。

申请加入预加载列表需满足以下条件:
- 仅支持 HTTPS,不支持 HTTP。
- 配置正确的 HSTS 头,且 max-age 至少为 31536000 秒(1年)。
- 包含 includeSubDomains 指令。
- 所有子域名都支持 HTTPS。
- 没有重定向到 HTTP 或无效证书。
相关问题与解答
问题 1:HSTS 是否可以防止所有类型的中间人攻破?
解答:
HSTS 可以显著降低中间人攻破(MITM)的风险,特别是针对协议降级和 SSL 剥离的攻破,但它并不能防止所有类型的中间人攻破,如果攻破者能够杜撰有效的 SSL 证书(例如通过入侵证书颁发机构 CA 或利用客户端信任链漏洞),HSTS 可能无法阻止攻破,HSTS 依赖于浏览器正确实现和遵守策略,如果浏览器存在漏洞或被恶意软件改动,HSTS 的保护效果可能会受到影响,HSTS 应作为多层安全策略的一部分,结合其他安全措施(如证书固定、内容安全策略等)使用。
问题 2:如果我在启用 HSTS 后,服务器证书过期或配置错误,会发生什么?
解答:
如果服务器证书过期或配置错误(例如证书域名不匹配),用户在启用 HSTS 后访问网站时,浏览器会直接拒绝连接,并显示严重的安全警告页面,而不会像普通 HTTPS 网站那样允许用户选择“继续访问”,这是因为 HSTS 强制要求使用有效的 HTTPS 连接,浏览器不会允许用户绕过证书错误,在启用 HSTS 之前,必须确保服务器证书有效且配置正确,否则可能导致网站完全不可访问,直到证书问题解决或 HSTS 策略过期,建议在测试环境中充分验证 HSTS 配置后再在生产环境启用。