浅析 Cloudflare 回源证书配置

当你的网站通过 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) 模式下,你有两种证书选择:

  1. Cloudflare Origin CA Certificate — Cloudflare 免费签发,有效期最长 15 年,仅被 Cloudflare 信任
  2. 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)

验证配置

配置完成后,可以通过以下方式验证:

  1. 在浏览器中访问你的站点,确认地址栏显示 HTTPS
  2. 查看 Cloudflare 控制台的 SSL/TLS → Origin Server,确认证书状态为 Active
  3. 使用 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 是最佳组合。

Cloudflare SSL Nginx