什么是HSTS?如何启用HTTP严格传输安全

快速总结: HSTS是一个HTTP响应头,指示浏览器始终使用HTTPS——永久防止SSL剥离和降级攻击,即使在不受信任的Wi-Fi网络上也是如此。

什么是HSTS?

HSTS代表HTTP严格传输安全。这是通过名为Strict-Transport-Security的HTTP响应头传递的网络安全策略。浏览器一旦收到此头部,就会记住该网站必须始终通过HTTPS访问,并在max-age周期内自动拒绝对该域的任何HTTP连接。

简单来说:即使用户输入http://yourdomain.com,浏览器也会在请求离开设备之前将其转换为https://——让攻击者无机会拦截连接。

为什么仅HTTPS还不够?

仅拥有SSL证书无法完全保护用户免受SSL剥离攻击。在SSL剥离攻击中,中间人在重定向到HTTPS之前拦截初始HTTP连接,然后静默地代理流量。用户看到HTTP而攻击者通过HTTPS与服务器通信。

这种攻击在公共Wi-Fi上特别有效——机场、咖啡馆、酒店——用户很少检查地址栏中的协议。

HSTS完全消除了这个窗口:浏览器根本不会发送HTTP请求。

HSTS如何工作

当浏览器首次通过HTTPS连接到启用HSTS的网站时,服务器会发送回如下所示的头部:

Strict-Transport-Security: max-age=31536000; includeSubDomains

浏览器存储此策略,意思是:

在接下来的一年里,对http://yourdomain.com的任何请求都会由浏览器本身自动升级到https://——无需往返服务器。

在Apache上启用HSTS(.htaccess)

对于使用Apache的虚拟主机客户(如DirectAdmin上的AsiaGB虚拟主机),将以下内容添加到您的.htaccess文件:

# 启用HSTS(SSL必须首先激活) <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" </IfModule>

要包含HSTS预加载(下面解释):

<IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" </IfModule>

重要提示: 仅在SSL证书完全工作后才启用HSTS。如果HSTS激活时SSL过期或出现问题,用户将完全被锁定,直到max-age过期。

在Nginx上启用HSTS

对于运行Nginx的VPS用户,在您的服务器块内添加此指令:

server { listen 443 ssl; # ... SSL配置 ... add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; }

在WordPress上启用HSTS

WordPress用户可以通过Really Simple SSL插件或Wordfence Security启用HSTS——两者在设置面板中都有切换开关。或者,任何允许您设置自定义HTTP头的插件都可以工作。

什么是HSTS预加载?

标准HSTS有一个限制:在首次访问网站时(浏览器看到HSTS头之前),仍然存在一个简短的漏洞窗口。HSTS预加载通过将您的域直接嵌入到随Chrome、Firefox、Safari和Edge一起提供的列表中来消除这个问题。

要在hstspreload.org申请HSTS预加载,您的网站必须:

启用HSTS前的关键警告

如何验证HSTS是否激活

方法1 — 浏览器开发工具: 按F12 → 网络标签 → 点击第一个请求 → 检查响应头中的Strict-Transport-Security

方法2 — 在线检查器: 访问securityheaders.com并输入您的域以查看您的安全头等级。

方法3 — Chrome HSTS管理器: 导航到chrome://net-internals/#hsts并查询您的域以查看Chrome是否已存储其HSTS策略。

选择正确的max-age值

您选择的max-age直接控制安全性和灵活性之间的平衡。太短则会失去保护;太长则SSL证书出现问题会锁定所有访问者。下表有助于您为您的阶段选择正确的值。

max-age(秒) 等效值 最适合 如果SSL出现问题的恢复时间
300 5分钟 初始测试 5分钟——非常宽容
86400 1天 过渡期 最多1天
2592000 30天 自信的生产网站 最多30天
31536000 1年 标准生产 最多1年——SSL必须永远不过期
63072000 2年 预加载提交 非常难以撤销

HSTS和您的网站安全评分

除了阻止攻击,HSTS还改善了您网站在多个评估框架中的安全评分。工具如securityheaders.com在HSTS与Content-Security-PolicyX-Frame-OptionsReferrer-Policy等补充头部一起出现时会颁发A或A+等级。Google还会将安全信号纳入其爬取和排名评估中。

对于处理支付数据的电子商务或任何网站,HSTS是PCI DSS(支付卡行业数据安全标准)要求的一部分。合规要求HTTP连接被永久阻止——HSTS是在浏览器级别强制执行此操作的正确技术机制,无需仅依赖服务器端重定向。

如果您使用dnsxray.com之类的工具对您的域进行安全头部检查,您将看到您的服务器发送的确切HSTS头部——包括max-age值、是否设置了includeSubDomains以及您的网站是否符合预加载提交的条件。

要避免的常见HSTS错误

HSTS配置很直接,但几个常见的错误可能导致没有保护或访问者被锁定。

总结:您应该启用HSTS吗?

如果您的网站在每个子域上都有有效的SSL证书——是的,强烈建议启用HSTS。它关闭了仅SSL无法保护的唯一剩余窗口:服务器重定向生效之前的第一个HTTP请求。

建议的路径:(1)安装受信任的SSL证书→(2)强制HTTP到HTTPS重定向→(3)添加max-age=300的HSTS头部→(4)用securityheaders.com测试→(5)逐步将max-age增加到1年→(6)当准备好时添加preload指令并提交到hstspreload.org。

从AsiaGB获取受信任的SSL证书

RapidSSL起价฿1,000/年 · GeoTrust · DigiCert · 5分钟内签发
与HSTS和HSTS预加载兼容所有主要浏览器

查看SSL计划 →