文章总结: HSTS是一种强制浏览器通过HTTPS访问网站的安全机制,通过Strict-Transport-Security响应头实现。部署HSTS需确保全站HTTPS,配置响应头,并考虑加入预加载列表。文章建议采用渐进式部署策略,先设置短max-age再逐步增加。HSTS虽能防止SSL剥离攻击,但存在首次访问问题、证书错误风险和部署复杂性,需与其他安全头部配合使用以最大化安全效果。 综合评分: 91 文章分类: WEB安全,应用安全,网络安全,安全建设
一文读懂什么是HSTS?
原创
筑梦网安
全栈安全
2025年10月31日 23:35 河南
先分享一个我亲身经历的技术支持案例:
IT部门的张先生给公司内部开发的一个网站配置了自签名证书,在部署HSTS后,所有员工都无法正常访问了。浏览器坚决拒绝连接,连“高级”→“继续前往”的选项都消失了。
张先生的需求很明确:“我需要让员工暂时能够访问这个测试网站,能不能在浏览器里关掉HSTS?”
这个案例完美地引出了我们今天要讨论的核心问题。
1. 什么是HSTS?超级英雄的起源故事
HSTS(HTTP Strict Transport Security)是一种机制,用于指示网站浏览器只能通过 HTTPS 访问该网站。此机制的工作原理是网站发送包含网站策略的 Strict-Transport-Security HTTP 响应标头。
常见格式如下:
Strict-Transport-Security: max-age=<expire-time>
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains; preload
HSTS就像一个忠诚的保镖,它的使命很简单:强制浏览器始终通过HTTPS与网站通信,即使用户输入的是HTTP网址。此外,在后续连接到该网站主机时,浏览器将不允许用户绕过安全连接错误,例如无效证书。HSTS 仅通过域名来识别主机。
这个”忠诚保镖”出生于2009年,最初由PayPal的工程师提出,后来成为国际标准(RFC 6797)。它的工作方式很直接:当用户第一次通过HTTPS访问网站时,网站会在响应头中包含一个HSTS指令,告诉浏览器:”记住,在接下来的一段时间内,访问我只能用HTTPS!”
如今,几乎所有的浏览器都支持HSTS了!
支持HSTS的浏览器
2. HSTS的工作原理:一场精彩的攻防战
2.1. 没有HSTS的情况
用户输入: http://example.com
↓
浏览器请求: http://example.com
↓
黑客拦截: 可以实施SSL剥离攻击!
↓
用户面临风险: 敏感信息可能被窃取
2.2. 有HSTS的情况
用户输入: http://example.com
↓
浏览器记忆: "啊,这个网站有HSTS策略!"
↓
浏览器自动: 将http://改为https://
↓
安全连接: 直接建立HTTPS连接,黑客无从下手!
HSTS响应头示例:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
这个简单的响应头包含三个关键部分:
max-age=31536000:HSTS策略的有效期(秒),这里是一年includeSubDomains:保护所有子域名preload:表明该网站希望加入浏览器预加载列表
3. 如何部署HSTS:一步一步指南
3.1. 第一步:确保全站HTTPS
在部署HSTS之前,你必须确保整个网站(包括所有子域名)都能通过HTTPS正常访问。
3.2. 第二步:添加HSTS响应头
根据你的服务器类型,配置方法不同:
Apache服务器:
# 在虚拟主机配置中添加
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Nginx服务器:
# 在server块中添加
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
云服务(如AWS CloudFront):
// 在Lambda@Edge函数中添加
'use strict';
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
response.headers['strict-transport-security'] = [
{ key: 'Strict-Transport-Security', value: 'max-age=31536000; includeSubDomains; preload' }
];
callback(null, response);
};
3.3. 第三步:测试HSTS配置
使用在线工具或浏览器开发者工具检查HSTS头是否正确发送:
- 打开Chrome开发者工具(F12)
- 切换到”Network”标签
- 访问你的网站
- 点击请求,查看响应头中是否有”Strict-Transport-Security”
deepseek网页请求返回示例
3.4. 第四步:考虑加入HSTS预加载列表
HSTS预加载是一个浏览器内置(硬编码在浏览器二进制文件)的网站列表,这些网站强制使用HTTPS,即使用户是第一次访问。
chrome浏览器源码
注:Chrome浏览器存放预加载域名的源码文件是
https://chromium.googlesource.com/chromium/src/+log/main/net/http/transport_security_state_static.json。
预加载前的完整检查清单:
- max-age ≥ 1年: ✅
- includeSubDomains配置: ✅
- 所有子域名HTTPS就绪: ✅
- 无混合内容问题: ✅
- 证书有效性: ✅
- 重定向正确配置: ✅
- 第三方服务兼容: ✅
- 用户体验验证: ✅
- 监控告警就绪: ✅
预加载准备充分后,可以访问hstspreload.org 提交你的域名。
申请将域名加入预加载列表
注意:HSTS预加载列表的一个重要特性:一旦被广泛使用,几乎无法撤销。
4. HSTS的局限性:没有银弹
尽管HSTS很强大,但它并非万能:
- 首次访问问题:用户第一次访问网站(或清除了浏览器缓存)时,HSTS尚未生效
- 证书错误:如果配置错误,HSTS可能导致用户无法访问网站(证书错误时无法跳过)
- 部署复杂性:需要确保所有子域名都支持HTTPS
5. 进阶技巧:最大化HSTS效果
5.1. 结合其他安全头部
HSTS与其他安全头部配合使用效果更佳:
# 综合安全头部配置
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
5.2. 渐进式部署策略
担心HSTS部署风险?可以采用渐进式方法:
- 先设置较短的
max-age(如300秒) - 逐步增加(一天、一周、一个月)
- 最终设置为一年并加入预加载列表
注意:万一出现网站无法访问的情况,可以快速回退。但有种特殊情况:在纸面上,5分钟的max-age看起来很安全。在实践中,比如用户一直在访问网站,HSTS策略不断“续杯”,可能会带来数小时的影响。
短期max-age的拯救作用:
// 假设配置错误,max-age=300(5分钟)
// 影响范围:最近5分钟内访问过的用户
// 恢复时间:5分钟后自动失效
// 对比:如果直接设置max-age=31536000(1年)
// 影响范围:所有访问过的用户
// 恢复时间:需要等待1年或用户手动清除数据
真实场景模拟:
时间线:
10:00:00 - 部署错误配置(遗漏了api子域名)
10:00:01 - 第一批用户开始报告无法访问API
10:01:30 - 监控系统告警,团队开始排查
10:03:00 - 发现问题,回滚配置
10:05:01 - HSTS策略自动过期,受影响用户恢复访问
总影响时间:5分钟
受影响用户:约1200人
如果直接部署1年有效期,影响将是灾难性的。
6. 结语:让HSTS成为你的标准配置
在当今的网络环境中,HSTS不再是一个”可有可无”的选项,而是网站安全的基本要求。谷歌、Facebook、Twitter等科技巨头早已全面部署HSTS,并将其视为Web安全的基础设施。
关注我,带你看懂技术本质!用最接地气的”人话”拆解硬核知识,让复杂概念变得简单易懂 🔥
添加好友邀请进技术交流群
每周更新:
- 💡 技术原理图解:一图胜千言,直观呈现技术架构
- 🛠️ 实战案例解析:结合真实项目经验,分享避坑指南
- 🤖 前沿技术追踪:第一时间解读AI、区块链等新兴领域
适合人群:
- ✅ 技术小白想系统入门
- ✅ 开发者想提升技术深度
- ✅ 产品经理需要技术洞察
- ✅ 所有对科技充满好奇的人
在这里你能获得:
- ✨ 复杂技术简单化
- ✨ 抽象概念具象化
- ✨ 理论知识实用化
- ✨ 学习路径清晰化
点击关注,开启你的技术认知升级之旅! 🚀
查看原文:《一文读懂什么是HSTS?》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论