修复方案:实施 HTTP Strict Transport Security (HSTS)
HSTS(HTTP Strict Transport Security) 是一种安全策略,强制浏览器仅通过 HTTPS 访问网站,防止 SSL 剥离攻击(如中间人攻击)。以下是完整修复方案:
1. 什么是 HSTS?
- 作用:
- 强制所有流量使用 HTTPS(自动跳转 HTTP → HTTPS)。
- 防止 SSL 证书被恶意绕过(如
http://
劫持)。 - 防止 Cookie 劫持(Secure + HttpOnly)。
- 关键响应头:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
max-age=31536000
(1年有效期)。includeSubDomains
(保护所有子域名)。preload
(提交到浏览器预加载列表,可选)。
2. 如何配置 HSTS?
(1)Nginx 配置
在 nginx.conf
或站点配置中添加:
server {
listen 443 ssl;
server_name your-domain.com;
# HSTS 配置(至少启用 max-age)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# 其他 SSL 配置
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
}
重启 Nginx:
nginx -t && systemctl restart nginx
(2)Apache 配置
在 ssl.conf
或虚拟主机配置中添加:
<VirtualHost *:443>
ServerName your-domain.com
# HSTS 配置
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
# 其他 SSL 配置
SSLEngine on
SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/key.pem
</VirtualHost>
重启 Apache:
systemctl restart apache2
(3)Tomcat(web.xml 或 server.xml)
在 web.xml
中添加:
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<init-param>
<param-name>hstsEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>hstsMaxAgeSeconds</param-name>
<param-value>31536000</param-value>
</init-param>
<init-param>
<param-name>hstsIncludeSubDomains</param-name>
<param-value>true</param-value>
</init-param>
</filter>
重启 Tomcat:
systemctl restart tomcat
(4)Cloudflare / CDN 配置
如果使用 Cloudflare,在 SSL/TLS → Edge Certificates 中启用 HSTS:
- 开启
Enable HSTS
。 - 设置
Max Age
(至少 6 个月)。 - 勾选
Include Subdomains
和Preload
(可选)。
3. 验证 HSTS 是否生效
(1)使用 curl 检查响应头
curl -I https://your-domain.com
预期输出:
HTTP/2 200
Strict-Transport-Security: max-age=31536000; includeSubDomains
(2)浏览器开发者工具(F12)
- 访问
https://your-domain.com
。 - 在 Network → Headers 中检查
Strict-Transport-Security
。
(3)在线检测工具
4. 高级配置(可选)
(1)提交到 HSTS Preload List
- 确保域名满足条件:
- HTTPS 全站可用。
- HSTS 包含
includeSubDomains
和preload
。 max-age
≥ 1 年(31536000)。
- 提交至 hstspreload.org。
(2)回退方案(测试阶段)
如果担心配置错误导致网站不可用,可先设置较短的 max-age
:
add_header Strict-Transport-Security "max-age=3600"; # 1 小时测试期
5. 注意事项
⚠️ 重要警告:
- 一旦启用 HSTS,浏览器会强制 HTTPS,如果证书错误,用户无法跳过警告!
- 确保全站 HTTPS 可用,否则会导致网站不可访问。
- 谨慎使用
preload
,提交后需等待浏览器更新(不可逆)。
📌 总结
- 配置 HSTS 响应头(
max-age=31536000; includeSubDomains
)。 - 验证是否生效(curl / 浏览器检查)。
- 可选提交 Preload(永久强制 HTTPS)。
修复后,浏览器将自动拒绝 HTTP 连接,大幅提升安全性! 🔒