SSL & 安全

HSTS Preload 是什么?
如何实现最高级别的HTTPS安全保护

📅 2026年9月22日 ⏱️ 阅读约10分钟 🔒 SSL & HTTPS 安全
HSTS Preload 实现最高级别HTTPS安全

如果您已安装SSL证书并配置了HTTP转HTTPS的重定向,这是一个很好的起点。但仍存在一个漏洞:重定向发生前的第一次HTTP请求。攻击者可以利用这个窗口期发动SSL剥离攻击或中间人攻击。

HSTS Preload完全封堵了这个漏洞。本文将解释它是什么、如何工作,以及如何将您的域名添加到全球浏览器使用的列表中。

什么是HSTS — 基础知识

HTTP严格传输安全(HSTS)是一种Web服务器策略,通过Strict-Transport-Security响应头告知浏览器"此网站只使用HTTPS"。

浏览器收到此响应头后,会在指定时间内(max-age)记住该域名需要HTTPS。在发送任何请求前,浏览器会自动将http://升级为https://,无需联系服务器。

💡 HSTS响应头示例 Strict-Transport-Security: max-age=31536000; includeSubDomains
max-age=31536000 = 记住1年(365天)

HSTS能防御哪些攻击?

什么是HSTS Preload及其区别

尽管HSTS效果出色,但它有一个弱点,称为首次使用信任(TOFU):浏览器必须至少通过HTTPS访问一次网站,才能记住需要强制使用HTTPS。

如果第一次访问发生在HTTP上(如输入裸域名或点击http://链接),用户在该初始连接期间仍面临风险。

HSTS Preload通过将HTTPS专用域名列表直接嵌入浏览器来解决这个问题 — 无需第一次访问,浏览器在安装之前就知道这些域名只使用HTTPS。

特性普通HSTSHSTS Preload
需要先进行HTTPS访问✅ 需要❌ 不需要
保护首次访问❌ 不保护✅ 保护
内置于浏览器✅ 硬编码
浏览器支持Chrome、Firefox、Safari、EdgeChrome、Firefox、Safari、Edge、Opera
易于移除✅ 容易(删除响应头)❌ 困难(耗时长)
覆盖子域名可选(includeSubDomains)强制(includeSubDomains)

HSTS Preload的工作原理

Chrome维护着一个开源的HSTS预载列表,所有主流浏览器都使用这个列表。该列表以transport_security_state_static.json文件的形式嵌入浏览器源代码中。

  1. 网站所有者在hstspreload.org提交域名
  2. Chrome团队验证要求(SSL + 响应头 + 子域名)
  3. 域名被添加到列表并合并到Chromium源代码
  4. 新Chrome版本发布时,更新后的列表分发给全球用户
  5. Firefox、Safari和Edge使用同一份列表
⚠️ 重要警告 一旦您的域名进入预载列表,浏览器将阻止所有HTTP连接 — 即使来自localhost或内部网络。如果SSL证书过期或损坏,用户将完全无法访问网站,直到问题解决。

提交前的必要条件

hstspreload.org要求您在提交前通过所有5个条件:

  1. 有效的SSL证书 — 未过期,由受信任的CA颁发
  2. HTTP → HTTPS重定向 — 端口80在所有情况下必须重定向到HTTPS
  3. HTTPS必须直接在443端口提供服务
  4. HTTPS上的HSTS响应头必须包含:
    • max-age ≥ 31,536,000(1年)
    • includeSubDomains
    • preload
  5. 所有子域名必须支持HTTPS — 例如www、mail、ftp必须有SSL证书
✅ 符合条件的响应头示例 Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

分步提交指南

第一步 — 安装SSL证书

需要在主域名和所有子域名上安装有效的SSL证书。可使用Let's Encrypt(免费)或来自受信任CA的商业证书。

第二步 — 配置HTTP → HTTPS重定向

在DirectAdmin主机上,将以下内容添加到.htaccess:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

第三步 — 添加HSTS响应头

# 在.htaccess的重定向块之后
Header always set Strict-Transport-Security \
  "max-age=31536000; includeSubDomains; preload"

第四步 — 在hstspreload.org上测试

打开hstspreload.org,输入您的域名,点击检查资格(Check Eligibility)— 提交前必须通过所有条件检查。

第五步 — 提交您的域名

点击hstspreload.org上的提交(Submit)按钮,输入电子邮件以接收状态通知。

第六步 — 等待审核

Chrome团队将审核并合并到列表中 — 通常需要4-8周,大多数用户才能在新Chrome版本中收到更新。

在.htaccess中完整配置HSTS

DirectAdmin主机的完整Apache配置:

# 强制HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# HSTS响应头(准备提交时添加preload)
<IfModule mod_headers.c>
  Header always set Strict-Transport-Security \
    "max-age=31536000; includeSubDomains; preload"
</IfModule>
💡 推荐 — 渐进式部署 先从max-age=300(5分钟)开始,验证所有子域名均支持HTTPS,然后逐步增加:86400(1天)→ 2592000(1个月)→ 31536000(1年),最后再提交。

HTTPS安全级别对比

级别配置保护首次访问复杂度
第1级仅SSL证书简单
第2级SSL + HTTP→HTTPS重定向简单
第3级SSL + 重定向 + HSTS❌(第2次访问起保护)中等
第4级 ⭐SSL + 重定向 + HSTS Preload较高

优势与注意事项

优势

注意事项

如何将域名从预载列表中移除

如需移除域名,请访问hstspreload.org/removal并:

  1. 从服务器上的HSTS响应头中删除preload指令
  2. 在hstspreload.org/removal提交移除请求
  3. 等待Chrome发布不含您域名的新版本
⚠️ 重要说明 即使提交移除请求后,尚未更新的旧版浏览器仍会继续强制使用HTTPS。这个过程可能需要6个月至1年才能完全生效。

常见问题解答

HSTS Preload 是什么?

HSTS Preload是硬编码在Chrome、Firefox、Edge等主流浏览器中的域名列表,强制列表中的所有域名只使用HTTPS连接,无需等待初始HTTP重定向。

HSTS和HSTS Preload有什么区别?

普通HSTS通过服务器发送Strict-Transport-Security响应头 — 浏览器在第一次HTTPS访问后记住。而HSTS Preload从第一次访问就强制使用HTTPS,因为域名在浏览器安装前就已内置。

提交HSTS Preload需要多长时间?

在hstspreload.org提交后,通常需要1-3个月,域名才会被纳入大多数用户使用的Chrome版本中。

可以将域名从HSTS Preload列表中删除吗?

可以,但需要很长时间 — 可能超过一年。因此在提交前请确保能长期维护HTTPS。

所有网站都需要HSTS Preload吗?

不是所有网站都需要。HSTS Preload适合安全要求极高的网站,如银行系统、登录系统或敏感数据平台。已有SSL证书和HTTP转HTTPS重定向的普通网站对大多数用途来说安全性已经足够。

HSTS Preload是否涵盖子域名?

是的 — HSTS Preload列表要求必须包含includeSubDomains指令,这样所有子域名也会自动强制使用HTTPS。

🔒 总结 — HSTS Preload

  • HSTS Preload = 您的域名被硬编码在浏览器中,始终使用HTTPS
  • 从第一次访问就开始保护 — 无TOFU漏洞
  • 要求:有效SSL + 重定向 + HSTS响应头含max-age≥1年 + includeSubDomains + preload
  • 在hstspreload.org免费提交 — 但移除困难,请提前规划
  • 最适合高安全性网站,并非所有网站都必须使用

需要为您的网站申请SSL证书?

AsiaGB提供多种SSL证书 — 从经济实惠的DV证书到适合企业的通配符和EV选项。在DirectAdmin上免费协助安装。

查看所有SSL证书 →