HTTP严格传输安全协议坏了怎么修?hsts配置错误怎么解决
- 云服务器
- 2026-07-06
- 13
HTTP 严格传输安全(HSTS)协议本身是一个由 Web 服务器向浏览器发送的响应头(Strict-Transport-Security),用于强制浏览器在未来的一段时间内仅通过 HTTPS 连接访问该网站,当用户遇到“HSTS 坏了”的情况时,通常表现为无法访问网站、浏览器报错(如“您的连接不是私密连接”或“HSTS 预加载列表错误”),或者在尝试切换回 HTTP 时被强制重定向导致循环。
修复 HSTS 相关问题需要根据你是普通用户还是网站管理员采取不同的策略,以下是详细的排查与修复指南。
普通用户如何修复 HSTS 错误
如果你只是访问某个网站时遇到 HSTS 相关的错误,通常是因为你的浏览器缓存了错误的 HSTS 策略,或者该网站之前的 HSTS 配置有误导致浏览器进入了“锁定”状态。
清除浏览器 HSTS 缓存
浏览器会将 HSTS 策略存储在本地数据库中,如果网站管理员修复了配置,但你的浏览器仍认为该网站存在 HSTS 问题,你需要手动清除这部分缓存。
-
Chrome / Edge / Brave 等 Chromium 内核浏览器:
- 在地址栏输入 chrome://net-internals/#hsts(Edge 为 edge://net-internals/#hsts)。
- 找到 Delete domain security policies 部分。
- 在 Domain 输入框中输入出问题的域名(example.com,不要带 http:// 或 www.)。
- 点击 Delete 按钮。
- 重启浏览器并重新访问网站。
-
Firefox:
- 在地址栏输入 about:preferences#privacy。
- 滚动到“Cookie 和网站数据”部分,点击 管理数据。
- 搜索该域名并移除。
- 或者,更彻底的方法是清除“已保存的 HSTS 信息”:在 about:config 中搜索 security.hsts 相关的设置(通常建议直接清除所有 Cookie 和缓存,因为 Firefox 没有像 Chrome 那样直观的 HSTS 删除界面)。
-
Safari (macOS):
- 打开 Safari,点击菜单栏的 Safari > 清除历史记录

。
- 选择 所有历史记录,点击 清除历史记录。
- 如果问题依旧,可能需要重置 Safari 设置或检查系统级的网络配置。
- 打开 Safari,点击菜单栏的 Safari > 清除历史记录
检查系统时间与日期
HSTS 依赖准确的时间戳来验证证书有效期和 HSTS 过期时间,如果系统时间不正确,浏览器可能会拒绝建立安全连接,从而表现为 HSTS 错误。
- 操作:确保你的电脑或手机时间与互联网时间服务器同步。
禁用 HSTS 预加载列表(临时方案)
如果网站不在 HSTS 预加载列表中,但浏览器仍报错,可能是预加载列表数据损坏。
- 操作:暂时禁用浏览器的 HSTS 预加载功能(不推荐长期这样做,因为这会降低安全性),或者等待浏览器更新其预加载列表。
网站管理员如何修复 HSTS 配置错误
如果你是网站管理员,发现用户反馈 HSTS 错误,或者你自己测试时发现 HSTS 头配置不当,请按照以下步骤检查和修复。
检查 HSTS 响应头格式
使用浏览器开发者工具(F12)或在线工具(如 SSL Labs)检查服务器返回的 Strict-Transport-Security 头。
常见的错误配置示例:

| 错误类型 | 错误示例 | 问题描述 |
|---|---|---|
| 缺少 max-age | Strict-Transport-Security: includeSubDomains | 没有指定持续时间,浏览器可能忽略或行为不一致。 |
| max-age 为 0 | Strict-Transport-Security: max-age=0 | 这会立即禁用 HSTS,可能导致安全回退攻破。 |
| 包含无效子域名 | includeSubDomains 但子域名无 HTTPS | 如果子域名没有有效的 SSL 证书,用户访问子域名时会报错。 |
| 预加载列表冲突 | 网站已提交预加载,但配置错误 | 一旦进入预加载列表,即使移除 HSTS 头,浏览器仍会强制 HTTPS。 |
正确的 HSTS 配置建议
一个标准的、安全的 HSTS 配置应包含以下三个部分:
- max-age:指定浏览器应记住 HSTS 策略的时间(秒),建议至少为 31536000(1 年)。
- includeSubDomains:可选,但推荐,表示该策略适用于所有子域名。
- preload:可选,但推荐,表示希望将域名加入浏览器的 HSTS 预加载列表。
推荐配置示例:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
常见故障排查步骤
-
步骤 1:验证 SSL 证书
确保主域名和所有子域名(如果使用了 includeSubDomains)都拥有有效且受信任的 SSL 证书,任何一个子域名的证书过期或无效都会导致 HSTS 报错。
-
步骤 2:检查重定向循环
如果服务器配置了 HTTP 到 HTTPS 的重定向,但 HSTS 头在 HTTP 响应中未正确发送(或发送了错误的 max-age),可能导致浏览器在首次访问时陷入重定向循环。
- 解决方案:确保 HTTP 请求也能返回正确的 HSTS 头(通常用于首次访问),或者确保 HTTPS 重定向配置正确。
-
步骤 3:处理 HSTS 预加载列表
如果网站之前已提交到 HSTS 预加载列表(如 Chrome 的预加载列表),即使你删除了服务器上的 HSTS 头,浏览器仍会强制 HTTPS。

- 解决方案:
- 访问 hstspreload.org 检查状态。
- 如果必须移除 HSTS,需先申请从预加载列表中移除。
- 等待浏览器更新预加载列表(可能需要数周)。
- 在移除期间,用户可能会遇到访问困难,需提前通知用户。
- 解决方案:
-
步骤 4:检查 CDN 或反向代理配置
如果使用 Cloudflare、Nginx 或 Apache 等中间件,确保 HSTS 头是在最终响应中正确设置的,有时,CDN 的缓存策略可能导致旧的、错误的 HSTS 头被缓存并分发给用户。
- 解决方案:清除 CDN 缓存,并检查 CDN 的 HSTS 设置是否与源站一致。
相关问题与解答
问题 1:为什么我在删除了服务器上的 HSTS 头后,浏览器仍然强制使用 HTTPS 访问网站?
解答:
这通常是因为你的域名已经被加入了浏览器的 HSTS 预加载列表(HSTS Preload List),一旦域名被预加载,浏览器会在本地硬编码该策略,不再依赖服务器返回的 HSTS 头,即使你从服务器上移除了 Strict-Transport-Security 头,浏览器仍会强制使用 HTTPS。
解决方法:你需要访问 hstspreload.org,查看你的域名状态,如果已提交,需按照指引申请从预加载列表中移除,移除后,需要等待浏览器更新其预加载列表(通常由浏览器厂商定期更新,可能需要几周时间),之后 HSTS 强制行为才会消失。
问题 2:HSTS 头中的 includeSubDomains 指令有什么风险?如果子域名没有 SSL 证书怎么办?
解答:
includeSubDomains 指令会将 HSTS 策略应用到所有子域名,如果主域名启用了 HSTS 并包含此指令,但某个子域名(如 test.example.com)没有安装有效的 SSL 证书,用户访问该子域名时将无法建立安全连接,浏览器会显示严重的安全警告,甚至阻止访问。
解决方法:
- 最佳实践:确保所有子域名都拥有有效的 SSL 证书,可以使用通配符证书(Wildcard Certificate,如 .example.com)来简化证书管理。
- 替代方案:如果某些子域名确实不需要 HTTPS 或无法获取证书,不要在主域名的 HSTS 头中使用 includeSubDomains,或者,为这些子域名单独配置 HSTS 策略(不启用 includeSubDomains),但这需要更复杂的服务器配置来区分不同子域名的响应头。