当你使用 Cloudflare 作为 CDN/代理时,访客连接到 Cloudflare 的边缘服务器。但 Cloudflare 和你的源站服务器之间的连接呢?如果源站没有证书,该连接可能是未加密的——这就违背了 HTTPS 的意义。
Cloudflare SSL 模式详解
| 模式 | 访客 → Cloudflare | Cloudflare → 源站 | 安全性 |
|---|---|---|---|
| Off | HTTP | HTTP | ❌ 无加密 |
| Flexible | HTTPS ✅ | HTTP ❌ | ⚠️ 虚假安全感 |
| Full | HTTPS ✅ | HTTPS(未验证) | ⚠️ 已加密但不验证证书 |
| Full (Strict) | HTTPS ✅ | HTTPS(已验证)✅ | ✅ 推荐 |
“Flexible” 模式是危险的。 你的访客看到锁头图标,但 Cloudflare→源站的连接是明文 HTTP。网络路径上的任何人都能读取流量。始终使用 Full (Strict)。
使用 Let’s Encrypt 证书配置 Full (Strict)
最佳方案:在源站安装一个真正的、公开信任的证书,然后启用 Full (Strict)。
第一步:获取 Let’s Encrypt 证书
使用 GetHTTPS 为你的域名获取免费证书。你需要临时禁用 Cloudflare 代理(DNS 设置中的灰色云朵)以便 HTTP-01 验证到达你的源站,或者使用 DNS-01 验证(无论代理状态都可用)。
DNS-01 方式(无需更改代理):
- 在 GetHTTPS 中,选择 DNS-01 验证
- 在 Cloudflare DNS 中添加
_acme-challengeTXT 记录 - 完成验证并下载证书
HTTP-01 方式:
- 在 Cloudflare DNS 中,将橙色云朵 → 灰色云朵(仅 DNS)
- 在 GetHTTPS 中完成 HTTP-01 验证
- 获取证书后,重新启用橙色云朵(代理模式)
第二步:安装到源站服务器
第三步:在 Cloudflare 中启用 Full (Strict)
- 前往 Cloudflare 控制面板 → 你的域名
- SSL/TLS → Overview
- 选择 Full (Strict)
Cloudflare 现在会在连接之前验证你的源站是否拥有有效的受信任证书。
替代方案:Cloudflare Origin CA 证书
Cloudflare 提供自己的 Origin CA 证书——免费证书,仅被 Cloudflare 信任,浏览器不直接信任。
如何获取
- Cloudflare 控制面板 → SSL/TLS → Origin Server
- 点击 Create Certificate
- 选择密钥类型(RSA 或 ECDSA)和有效期(最长 15 年)
- 下载证书和私钥
- 安装到源站服务器
与 Let’s Encrypt 的优劣对比
| Cloudflare Origin CA | Let’s Encrypt (通过 GetHTTPS) | |
|---|---|---|
| 被谁信任 | 仅 Cloudflare | 所有浏览器(公开信任) |
| 有效期 | 最长 15 年 | 90 天 |
| 需要自动续签 | 不需要(有效期长) | 需要(每 60-90 天) |
| 脱离 Cloudflare 可用 | ❌ | ✅ |
| 浏览器直接访问 | ❌(显示错误) | ✅ |
| 费用 | 免费 | 免费 |
使用 Cloudflare Origin CA 的情况:你的源站始终在 Cloudflare 后面,且你希望零续签管理。
使用 Let’s Encrypt 的情况:你可能会绕过 Cloudflare(维护、迁移),需要直接访问源站,或者需要一个在任何地方都能工作的证书。
验证 Full (Strict) 是否正常工作
设置完成后,测试连接是否完全加密:
- Cloudflare 控制面板 → SSL/TLS → Overview 应显示”Full (Strict)”
- 访问你的网站 → 访客应该看到 Cloudflare 的证书
- 直接检查源站(绕过 Cloudflare):
这应该返回一个有效的 HTTPS 响应,带有你的 Let’s Encrypt(或 Origin CA)证书。curl -I --resolve yourdomain.com:443:YOUR_ORIGIN_IP https://yourdomain.com
常见问题
为什么不直接用 Flexible 模式?
Flexible 模式加密了访客→Cloudflare 的连接,但从 Cloudflare 到源站的流量是明文 HTTP。这意味着:
- 你的 ISP、主机提供商或 Cloudflare 边缘与你服务器之间网络上的任何人都能读取所有流量
- 你的访客看到锁头图标,以为自己是安全的,但后端连接并不安全
- 这对登录页面、支付表单或任何敏感数据来说尤其危险
源站证书需要与域名完全匹配吗?
对于 Full (Strict) 模式,是的——源站证书必须对 Cloudflare 连接的域名有效。example.com 的 Let’s Encrypt 证书可以工作。自签名证书或其他域名的证书则不行。
可以使用通配符证书作为源站证书吗?
可以。源站上的 *.example.com 通配符证书 可以配合 Full (Strict) 用于通过 Cloudflare 代理的任何子域名。
源站证书过期会怎样?
Cloudflare 的 Full (Strict) 模式会检查证书有效性。如果你的源站证书过期,Cloudflare 无法建立安全连接,你的网站会显示 526 错误(Invalid SSL Certificate)。设置过期监控来防止这种情况。