HTTPS 本来是用来防止窃听和篡改的,但在某些条件下,攻击者可以通过**“降级攻击”(HTTPS Downgrade Attack),把原本安全的 HTTPS 连接强行变回不安全的 HTTP**,从而重新获得“可监听、可篡改”的能力。
下面把这个问题彻底讲清楚👇
一、什么是“降级攻击”?(一句话)
👉 降级攻击 = 强迫浏览器不用 HTTPS,而改用 HTTP
二、为什么“降级”是可能的?
核心原因:
👉 浏览器一开始并不知道你“必须用 HTTPS”
例如你输入:
example.com
浏览器默认会先尝试:
http://example.com ← ❗ 关键弱点
然后网站再跳转到:
https://example.com
👉 问题就在这个“中间跳转”阶段 ⚠️
三、典型攻击:SSL Strip(经典降级攻击)
这是最经典的一种方式。
🔹 正常流程(无攻击)
用户 → http://example.com ↓ 服务器返回 301 跳转 ↓ https://example.com ↓ 安全通信
🔥 被降级攻击(SSL Strip)
用户 → http://example.com ↓ ⚠ 攻击者拦截 ↓ ❌ 删除“跳转到 HTTPS” ↓ 用户继续使用 HTTP ↓ 攻击者完全可见 + 可篡改
👉 用户看到的是:
页面能正常打开 ✅
但其实是 HTTP ❌(无锁)
四、攻击者具体做了什么?
攻击者(通常在中间人位置,比如公共 WiFi):
1️⃣ 拦截 HTTP 请求
因为 HTTP 是明文的
2️⃣ 修改服务器响应
把:
Location: https://example.com
改成:
(删除 / 改为 http)
3️⃣ 替换页面中的 HTTPS 链接
把:
<a href="https://bank.com">
改成:
<a href="http://bank.com">
👉 用户永远被困在 HTTP 世界
五、为什么 HTTPS 本身“挡不住”?
关键点:
👉 攻击发生在 HTTPS 建立之前
也就是:
DNS → HTTP → (还没进入 HTTPS)
👉 HTTPS 还没来得及发挥作用,就已经被绕开了
六、降级攻击的几种形式
1️⃣ SSL Strip(最经典)
强制 HTTP
用户无感知
2️⃣ 协议降级(TLS 版本降级)
攻击者让双方使用弱加密:
TLS 1.3 → TLS 1.0(甚至 SSL)
👉 利用旧协议漏洞
3️⃣ HTTPS → HTTP 跳转劫持
删除 301/302 跳转
或改写为 HTTP
4️⃣ 混合内容攻击(Mixed Content)
HTTPS 页面中加载 HTTP 内容:
https 页面 ↓ 加载 http 图片 / JS
👉 仍然可被劫持
七、如何防御降级攻击(核心重点)
✅ 1. HSTS(最关键机制)
HTTP Strict Transport Security
浏览器记住:
这个网站必须用 HTTPS!
之后:
自动把 HTTP 改成 HTTPS
不再给攻击者机会
✅ 2. HSTS Preload(终极防护)
浏览器内置列表(如 Chrome):
👉 一开始就强制 HTTPS(连第一次都保护)
✅ 3. 禁用弱 TLS
服务器配置:
只允许 TLS 1.2 / 1.3
✅ 4. 全站 HTTPS + 强制跳转
不允许 HTTP 页面存在
所有资源必须 HTTPS
✅ 5. 用户侧注意
看地址栏 🔒
不忽略证书警告
避免公共 WiFi(或用 VPN)
八、一个完整攻击 vs 防御对比
❌ 无防护
用户 → HTTP → 被劫持 → 一直HTTP
✅ 有 HSTS
用户 →(浏览器强制)HTTPS ↓ 攻击者无法插手
九、一句话总结
👉 降级攻击的本质:在 HTTPS 还没建立之前,把你“拽回 HTTP”
👉 解决核心:让浏览器“从一开始就只用 HTTPS”(HSTS)