当你的网站通过 Cloudflare CDN 加速时,用户到 Cloudflare 的连接是加密的(HTTPS),但 Cloudflare 到你源站的连接是否加密,取决于你的 SSL/TLS 模式设置。本文重点介绍 Full (Strict) 模式下的回源证书配置。
Cloudflare SSL/TLS 模式对比
Cloudflare 提供了三种 SSL 模式:
| 模式 | 用户→CF | CF→源站 | 源站证书要求 |
|---|---|---|---|
| Flexible | HTTPS | HTTP | 无 |
| Full | HTTPS | HTTPS | 有证书即可(自签名也行) |
| Full (Strict) | HTTPS | HTTPS | 必须是受信任的证书 |
强烈建议使用 Full (Strict) 模式,这是唯一能保证端到端加密的选项。Flexible 模式下,CF 到源站是明文传输,存在中间人攻击风险。
回源证书方案选择
在 Full (Strict) 模式下,你有两种证书选择:
- Cloudflare Origin CA Certificate — Cloudflare 免费签发,有效期最长 15 年,仅被 Cloudflare 信任
- Let's Encrypt 证书 — 公开信任,有效期 90 天,需自动续签
如果你的源站只通过 Cloudflare 访问(不直接暴露),推荐使用 Origin CA Certificate,配置简单且有效期长。
配置步骤
1. 签发 Origin CA 证书
登录 Cloudflare 控制台,进入 SSL/TLS → Origin Server,点击 Create Certificate。选择以下配置:
- 私钥类型:RSA (2048)
- 域名:默认即可(包含泛域名)
- 有效期:15 年
点击创建后,Cloudflare 会显示证书和私钥。请务必保存私钥,关闭页面后无法再次查看。
2. 在源站配置证书
将证书保存为 /etc/ssl/certs/cloudflare-origin.pem,私钥保存为 /etc/ssl/private/cloudflare-origin.key。
Nginx 配置示例:
server {
listen 443 ssl http2;
server_name blog.example.com;
ssl_certificate /etc/ssl/certs/cloudflare-origin.pem;
ssl_certificate_key /etc/ssl/private/cloudflare-origin.key;
root /var/www/blog;
index index.html;
}
3. 设置 SSL 模式为 Full (Strict)
在 Cloudflare 控制台的 SSL/TLS → Overview 中,将模式切换为 Full (Strict)。
验证配置
配置完成后,可以通过以下方式验证:
- 在浏览器中访问你的站点,确认地址栏显示 HTTPS
- 查看 Cloudflare 控制台的
SSL/TLS → Origin Server,确认证书状态为 Active - 使用
curl -v https://your-domain.com检查响应头中的cf-ray字段
提示:如果你需要直接访问源站(绕过 Cloudflare),应该使用 Let's Encrypt 证书而非 Origin CA 证书,因为后者仅被 Cloudflare 信任。
常见问题
ERR_TOO_MANY_REDIRECTS
这通常是因为 Cloudflare SSL 模式设为 Flexible,而源站又配置了 HTTP→HTTPS 跳转,导致无限重定向。解决方法是将 SSL 模式改为 Full 或 Full (Strict)。
525 SSL Handshake Failed
说明 Cloudflare 无法与源站完成 SSL 握手。检查:
- 源站 443 端口是否开放
- 证书和私钥是否匹配
- 证书是否过期
回源证书的配置并不复杂,但选择正确的模式和证书类型很重要。对于大多数场景,Full (Strict) + Origin CA Certificate 是最佳组合。