当您访问一个值得信赖的网站时,您确信自己的数据受到保护?但如果在您不知情的情况下,这种安全性被剥夺,您的敏感信息将暴露给网络犯罪分子,该怎么办?在本文中,我们将详细说明SSL剥离是什么、它如何工作以及如何保护您的企业免受这种复杂的网络威胁。
什么是SSL剥离攻击?
SSL 剥离攻击(SSL Stripping)是一种典型的中间人攻击(MITM)手段,攻击者通过拦截客户端与服务器之间的初始明文 HTTP 请求,阻止安全连接建立,将本应升级的 HTTPS 通信强制降级为纯文本 HTTP 通信。这种攻击利用了用户直接在地址栏输入域名而非完整协议头(https://)的习惯,导致敏感数据在传输层完全暴露。
了解其运作原理对于排查 如何修复SSL证书错误? 以及优化整体站点架构至关重要。若需构建基础的防护防护链路,可先参阅 什么是SSL证书? 掌握非对称加密的基本逻辑。
SSL 剥离攻击的核心原理与流程
在未启用强制安全策略的网络环境下,浏览器访问网站的过程往往存在天然的安全漏洞。SSL 剥离攻击并不直接破解 SSL/TLS 协议的加密算法,而是作用于协议协商的“交接点”。
[客户端] ----(1) HTTP 请求----> [攻击者 (MITM)] ----(2) HTTPS 请求----> [目标服务器]
[客户端] <---(4) HTTP 响应---- [攻击者 (MITM)] <---(3) HTTPS 响应---- [目标服务器]
1. 攻击链路拆解
- 流量拦截:攻击者在局域网内通过 ARP 欺骗、DNS 劫持或搭建伪造 Wi-Fi 热点,获取客户端流量的控制权。
- 请求伪造与中间人转发:当用户在浏览器输入
example.com时,发起的是 80 端口的 HTTP 请求。攻击者拦截该请求,并由自己向目标服务器发起 443 端口的 HTTPS 连接。 - 剥离加密响应:目标服务器返回 301/302 重定向或带有 HTTPS 链接的 HTML 页面。攻击者拦截该响应,将其中所有的
https://替换为http://,再剥离加密层,把纯文本页面返回给用户。 - 明文凭据窃取:用户在前端看到的界面与原站一致,但在提交表单或登录信息时,数据以明文传输给攻击者,攻击者再通过自己的 HTTPS 会话代为提交至服务器。

常见 SSL 降级攻击形态
网络环境中常见的 SSL 剥离与降级手段一般可以分为以下三类:
| 攻击类型 | 实施机制 | 常见场景 | 危害特征 |
|---|---|---|---|
| 经典 SSL 剥离 | 动态修改 HTTP/HTTPS 响应内容,擦除页面中的安全协议头 | 公共 Wi-Fi、局域网 ARP 欺骗 | 用户地址栏不显示绿锁或 HTTPS 标志,流量全程明文 |
| 协议降级攻击 | 干扰 TLS 握手协商(如 DOWNGRD 攻击),强迫双方降级使用老旧协议 | 存在历史兼容包的 Web 服务器 | 利用旧版 TLS(如 1.0/1.1)或废弃弱加密套件的已知漏洞 |
| 混合钓鱼剥离 | 结合相似域名(Typosquatting)与伪造证书,配合剥离技术 | 恶意邮件、社交工程学攻击 | 构造极具欺骗性的 HTTP 假冒界面,直接诱捕用户凭据 |
运维视角下的防范方案
单纯依赖部署普通证书无法完全阻断 SSL 剥离,因为攻击发生时客户端压根没有机会建立 TLS 连接。工程落地中需要从服务端配置与浏览器策略联动入手。
1. 部署 HSTS(HTTP 严格传输安全)
HSTS(HTTP Strict Transport Security)是防御 SSL 剥离最直接有效的手段。服务器通过添加响应头,强制浏览器在指定时间内仅使用 HTTPS 访问:
HTTP
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
- **
max-age**:指定强制 HTTPS 的缓存时间(单位为秒,一般建议设置为一年以上)。 - **
includeSubDomains**:将策略递归应用到所有子域名。 - **
preload**:申请加入浏览器的 HSTS Preload List(预加载列表)。加入后,主流浏览器在首次访问前就会内置强制 HTTPS 规则,彻底消除第一次 HTTP 访问时的风险窗口。
2. 全站 301 强制跳转与 HTTP 响应重写
服务端必须配置严格的全局重定向规则。如果使用 Nginx,一般在 80 端口的 server 块中配置:
Nginx
server {
listen 80;
server_name example.com www.example.com;
return 311 https://$host$request_uri;
}
关于从站点架构层面彻底完成协议平滑过度,可以参考 网站如何从HTTP更改为HTTPS? 的操作细节。
3. Cookie 安全标记设置
避免敏感 Cookie 在被剥离的环境中通过 HTTP 明文泄漏。配置 Cookie 时必须携带 Secure 和 SameSite 属性:
HTTP
Set-Cookie: session_id=xyz123; Secure; HttpOnly; SameSite=Strict
在开启 Secure 标记后,即便前端页面被剥离为 HTTP,浏览器也不会在明文请求中发送该 Cookie。
SSL 剥离攻击技术型总结
SSL 剥离攻击本质是对 HTTP 到 HTTPS 升级过渡期无保护状态的漏洞利用。通过中间人代理抹去响应包中的加密指令,攻击者能够无感知地把流量降级为纯文本传输。仅部署证书无法防御此类攻击,必须在服务端集成 HSTS 响应头并申请 HSTS Preload 预加载,结合 Cookie Secure 属性锁定传输信道,才能从源头上切断协议降级的可能性。
常见问题
为什么网站安装了 SSL 证书,用户依然会被 SSL 剥离攻击?
因为 SSL 证书作用于 HTTPS 连接建立后的数据加密阶段。如果用户首次访问输入的是 http://,且攻击者在第一次重定向返回前就拦截并篡改了数据,连接就根本无法升级到 HTTPS,证书也就无法生效。
如何判断网站是否容易遭受 SSL 剥离攻击?
一般可以通过检测响应头来判断。如果网站没有配置 Strict-Transport-Security 请求头,或者没有加入 HSTS 预加载列表,且允许纯 HTTP 状态下直接加载敏感表单页面,即存在被剥离降级的风险。
HSTS Preload(预加载)和普通的 HSTS 响应头有什么区别?
普通的 HSTS 响应头需要用户“至少成功访问过一次 HTTPS 页面”后,浏览器才会记录规则;而加入 HSTS Preload 列表后,浏览器在安装时就已经内置了该域名必须使用 HTTPS 的规则,消除了首次访问时被攻击的风险。
配置 HSTS 会影响网站现有的 HTTP 业务吗?
会。如果站点内依然存在无法提供 HTTPS 服务的老旧子系统,开启 includeSubDomains 规则的 HSTS 会导致这些子系统在客户端直接打不开。因此部署前需确认全站及子域名均已正常支持 HTTPS。




京公网安备11010502031690号
网站经营企业工商营业执照
















