Cloudflare SSL/TLS 加密模式
用户浏览器到 Cloudflare、Cloudflare 到源站,这两段路如果有一段是明文,整个传输就不能算安全。Cloudflare 的 SSL/TLS 加密模式控制的就是这两段路的加密策略。这一篇讲清楚四种模式的区别,重点说明 Flexible 模式的安全风险,避免新手踩坑。
SSL 与 TLS 是什么
SSL(Secure Sockets Layer,安全套接层)是早期的加密协议,TLS(Transport Layer Security,传输层安全)是它的继任者。现在业内还在用 SSL 这个老名字,实际跑的都是 TLS。Cloudflare 控制台用 SSL/TLS 这个写法,意思是同一回事。
HTTPS 就是 HTTP 加上 TLS。用户在浏览器看到的小锁图标,代表这段连接用了 TLS 加密。Cloudflare 在 HTTPS 链路里扮演中转角色,因此分成两段。
| 链路段 | 起点 | 终点 |
|---|---|---|
| 边缘到用户 | Cloudflare 节点 | 用户浏览器 |
| 边缘到源站 | Cloudflare 节点 | 你的源站服务器 |
两段路分别决定是否加密、用什么证书、是否校验。四种加密模式就是这两段路加密策略的组合。
四种加密模式
进入域名的 SSL/TLS 分区,在 Edge Certificates 下能看到加密模式选项。从弱到强共四种。
| 模式 | 边缘到用户 | 边缘到源站 | 安全性 |
|---|---|---|---|
| Off | 不加密 | 不加密 | 最弱 |
| Flexible | 加密 | 不加密 | 弱,有风险 |
| Full | 加密 | 加密 | 中等 |
| Full (strict) | 加密 | 加密并校验 | 强 |
下面逐个说明。
Off 模式
完全关闭 HTTPS。用户访问 https://example.com 会失败,只能用 http://。Cloudflare 不与用户建立 TLS 连接,也不与源站建立。
这种模式只适合完全不考虑安全的内网测试或纯内部用途。任何对公网开放的服务都不应该用 Off。
Flexible 模式
用户到 Cloudflare 这段加密,Cloudflare 到源站这段不加密。用户在浏览器看到的是 HTTPS 小锁,但 Cloudflare 把请求转给源站时用的是明文 HTTP。
这种模式看起来安全,实际有严重缺陷,是新手最容易踩的坑。
Flexible 的安全风险
Flexible 模式的风险点在 Cloudflare 到源站这一段。这段流量走公网,明文传输意味着任何人都能在中间截获,看到完整请求内容,包括表单数据、Cookie、API 凭证。
| 风险 | 说明 |
|---|---|
| 中间人窃听 | 源站 IP 段的流量可被监听 |
| 数据篡改 | 响应内容可被中间节点改写 |
| Cookie 暴露 | 用户会话凭证在明文段外泄 |
| 误导性安全感知 | 浏览器显示小锁,让人误以为全程加密 |
最危险的是最后一条。用户和开发者都以为 HTTPS 就是安全的,实际上后半段裸奔。如果源站所在机房或途经网络被入侵,用户数据就泄露了,而且很难被发现。
Flexible 模式只在一种情况下有合理性,源站完全不支持 HTTPS,例如某些老旧设备或自建的内网服务,又必须用 Cloudflare 的 CDN。即便如此,也强烈建议先给源站配上 HTTPS,再切到 Full 模式。
Full 模式
用户到 Cloudflare 加密,Cloudflare 到源站也加密。源站需要配置一张证书,可以是正规 CA 签发的,也可以是自签的。Cloudflare 不会校验源站证书的合法性,只要它能完成 TLS 握手即可。
这比 Flexible 安全很多,因为全程都加密了。但有一个隐患,Cloudflare 不校验源站证书,意味着源站证书过期、自签、甚至被替换为伪造证书,Cloudflare 都不会报错。如果攻击者能控制源站或中间网络,理论上可以替换证书实施中间人攻击。
| 对比项 | Flexible | Full |
|---|---|---|
| 用户到边缘 | 加密 | 加密 |
| 边缘到源站 | 不加密 | 加密 |
| 源站证书要求 | 无 | 需要证书,可不正规 |
| 证书校验 | 不适用 | 不校验 |
| 安全性 | 弱,明文段存在 | 中等,全程加密 |
Full (strict) 模式
在 Full 基础上增加证书校验。Cloudflare 会校验源站证书是否由受信任 CA 签发、是否在有效期内、域名是否匹配。任何一项不通过,请求直接失败。
这是四种模式里最安全的,也是生产环境应该选的模式。源站证书可以是下面任意一种。
| 证书来源 | 是否被 strict 接受 |
|---|---|
| 公共 CA 签发,例如 Let’s Encrypt | 是 |
| Cloudflare Origin CA 签发 | 是 |
| 自签证书 | 否 |
| 过期证书 | 否 |
Cloudflare Origin CA 是 Cloudflare 免费提供的源站证书签发服务,有效期最长 15 年,只能用于 Cloudflare 到源站这段,下一篇会专门讲。
模式选择建议
实际项目里怎么选,下面这张表给一个直接结论。
| 场景 | 推荐模式 |
|---|---|
| 生产环境,源站有正规证书 | Full (strict) |
| 生产环境,源站只有自签证书 | Full,尽快换正规证书 |
| 临时测试,源站无 HTTPS | Flexible,尽快改造 |
| 纯内网测试 | Off 或 Flexible |
绝大多数情况下目标应该是 Full (strict)。从 Flexible 升级到 Full 的步骤是先给源站申请证书,例如用 Let’s Encrypt 免费签发,然后在 Cloudflare 把模式切到 Full (strict),观察是否有报错,有报错说明证书配置有问题,修好再切。
小结
四种加密模式里 Off 和 Flexible 不该用于生产环境,Full 是过渡方案,Full (strict) 是生产标配。Flexible 的最大危害是伪装安全,浏览器显示小锁但后半段明文。下一篇讲怎么准备源站证书、配置边缘证书和安全响应头,把 HTTPS 真正做扎实。