lin 发表于 2025-7-15 17:29:00

什么是 HSTS?原理、作用与配置

一、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-ageHSTS 策略有效时间(秒)
includeSubDomains将策略应用到所有子域名
preload允许该域名加入浏览器预加载列表(详解见下)
🎯 生效流程

[*]用户以 HTTPS 访问网站
[*]服务器返回 HSTS 响应头
[*]浏览器记录该域名策略,在 max-age 时间内:

[*]所有 HTTP 请求自动升级为 HTTPS
[*]即使用户输入 http://example.com,浏览器也会自动改为 https://example.com4.
[*]若证书无效,浏览器会阻止访问,且用户无法绕过。
三、为什么需要 HSTS?
🔍 1. 防御 SSL Strip 攻击
SSL Strip 攻击:

[*]攻击者在客户端与服务器之间拦截请求
[*]将用户访问 https://example.com 替换为 http://example.com
[*]用户与攻击者的连接是 HTTP,攻击者再与服务器建立 HTTPS,实现中间人攻击
✅ 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; preloadmax-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 列表,防御首次访问漏洞
风险证书失效将导致用户无法访问

页: [1]
查看完整版本: 什么是 HSTS?原理、作用与配置