|
这里或许是互联网从业者的最后一片净土,随客社区期待您的加入!
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、HSTS 定义
HSTS(HTTP Strict Transport Security,HTTP 严格传输安全)
是由 IETF 定义的一个安全功能,规范为 RFC 6797。
它允许网站通过响应头声明:
✅ 浏览器必须使用 HTTPS 与其通信
✅ 禁止使用 HTTP 请求
✅ 防止 SSL Strip 攻击(HTTPS 降级攻击)
二、HSTS 工作原理
当用户首次以 HTTPS 访问网站时,服务器返回响应头:
- Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
复制代码 各字段含义:
字段 | 作用 | max-age | HSTS 策略有效时间(秒) | includeSubDomains | 将策略应用到所有子域名 | preload | 允许该域名加入浏览器预加载列表(详解见下) | 🎯 生效流程
- 用户以 HTTPS 访问网站
- 服务器返回 HSTS 响应头
- 浏览器记录该域名策略,在 max-age 时间内:
三、为什么需要 HSTS?
🔍 1. 防御 SSL Strip 攻击
SSL Strip 攻击:
✅ HSTS 能防止此类降级,因为浏览器强制使用 HTTPS。
🔍 2. 提升安全等级
- 阻止用户在公共 WiFi 等环境下使用不安全的 HTTP
- 防止 cookie 通过 HTTP 明文泄露
四、HSTS preload 机制
🚀 什么是 preload?
浏览器厂商(如 Chrome、Firefox、Edge)维护一个 HSTS preload list,内置于浏览器中。
当网站申请加入 preload 后:
- 即使用户首次访问使用 http://,浏览器也会直接改为 https://,防御 SSL Strip 攻击的 首次访问漏洞。
✅ preload 条件
启用 HTTPS 并正确配置证书
返回的 HSTS 响应头包含:
- Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
复制代码 max-age 至少为 31536000(1 年)
所有子域名必须支持 HTTPS
五、HSTS 配置方法
⚙️ 1. Nginx 配置
在 server 段添加:
- add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
复制代码 always 确保无论返回状态如何都发送该头。
⚙️ 2. Apache 配置
- Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
复制代码 ⚠️ 注意事项
配置 HSTS 后,若网站证书配置错误或过期,用户将无法访问
(因为浏览器拒绝访问且用户无法跳过警告)
配置 includeSubDomains 需确保所有子域名均支持 HTTPS,否则会造成访问失败。
六、查看 HSTS 是否生效
在浏览器开发者工具 ➔ Network ➔ Response Headers 查看是否返回:
- Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
复制代码 七、常见问题
问题 | 解决方案 | 配置 HSTS 后 HTTP 无法访问 | HSTS 设计即强制 HTTPS,确保证书配置正确。 | 如何取消 HSTS? | 返回 max-age=0,但 preload 域名需从浏览器 preload list 中移除,过程繁琐。 | 八、总结
维度 | 内容 | 作用 | 强制浏览器使用 HTTPS,防止 SSL Strip 攻击 | 配置 | 添加 Strict-Transport-Security 响应头 | preload | 加入浏览器内置 HSTS 列表,防御首次访问漏洞 | 风险 | 证书失效将导致用户无法访问 |
|
|