cloudflare和源站之间的2个证书及其关系

非常好的问题!你提到的 Authenticated Origin Pulls(认证源站拉取) 是 Cloudflare 提供的一项高级安全功能,用于确保 只有 Cloudflare 的边缘节点 能够连接到你的源站服务器,从而防止攻击者绕过 Cloudflare 直接访问你的后端。

下面我们深入解释:


🔐 一、什么是 Authenticated Origin Pulls?

默认情况下,即使你启用了 Cloudflare 代理(橙色云),只要有人知道你的真实 IP,仍可能直接访问你的源站(绕过 WAF、DDoS 防护等)。

Authenticated Origin Pulls 通过 双向 TLS 认证(mTLS) 解决这个问题:

  • 当 Cloudflare 向你的源站发起 HTTPS 请求时,Cloudflare 会出示一个客户端证书
  • 你的源站(如 Nginx)会验证这个证书是否由 Cloudflare 的私有 CA 签发
  • 如果验证失败(比如是攻击者直连),就拒绝连接

✅ 这比“仅 IP 白名单”更安全,因为 IP 可伪造(虽然难),而证书无法伪造。


📄 二、authenticated_origin_pull_ca.pem 是什么?

这是 Cloudflare 用于签发“客户端证书”的根 CA 证书

  • 文件名:authenticated_origin_pull_ca.pem
  • 作用:用于验证 Cloudflare 在 mTLS 握手时提供的客户端证书
  • 官方下载地址:
    https://developers.cloudflare.com/ssl/static/authenticated_origin_pulls_ca.pem
    

⚠️ 注意:它和 origin-pull-ca.pem(用于 Origin Certificate)完全不同

文件用途使用场景
origin-pull-ca.pem 验证 源站证书 是否由 Cloudflare 签发 Cloudflare → 源站:验证源站身份(Full (strict) 模式)
authenticated_origin_pull_ca.pem 验证 Cloudflare 客户端证书 是否合法 源站 → Cloudflare:验证请求方是否真是 Cloudflare(mTLS)

✅ 简单记:

  • Origin Certificate:源站向 Cloudflare 证明“我是我”
  • Authenticated Origin Pulls:Cloudflare 向源站证明“我是 Cloudflare”

🔗 三、两者关系总结

功能方向谁验证谁用哪个 CA 文件
Origin Certificate + Full (strict) Cloudflare → 源站 Cloudflare 验证源站证书 origin-pull-ca.pem(源站安装此 CA 签发的证书)
Authenticated Origin Pulls Cloudflare → 源站 源站验证 Cloudflare 的客户端证书 authenticated_origin_pull_ca.pem(源站用此 CA 验证 Cloudflare)

💡 它们可以同时启用,实现双向认证(mTLS):

  • 源站用 Let’s Encrypt 证书(或 Origin Cert)
  • 源站要求所有 HTTPS 请求必须携带 Cloudflare 客户端证书,并用 authenticated_origin_pull_ca.pem 验证

🛠 四、如何在 Nginx 中配置 Authenticated Origin Pulls?

步骤 1:下载 CA 文件

sudo mkdir -p /etc/nginx/cloudflare
sudo curl -o /etc/nginx/cloudflare/authenticated_origin_pulls_ca.pem \
  https://developers.cloudflare.com/ssl/static/authenticated_origin_pulls_ca.pem

步骤 2:配置 Nginx(强制客户端证书验证)

server {
    listen 443 ssl http2;
    server_name yourdomain.com;

    # 源站 SSL 证书(可以是 Let's Encrypt 或 Origin Cert)
    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

    # === 启用 Authenticated Origin Pulls ===
    ssl_client_certificate /etc/nginx/cloudflare/authenticated_origin_pulls_ca.pem;
    ssl_verify_client on;  # 必须开启!
    ssl_verify_depth 2;

    # 其他配置...
    location / {
        # 只有 Cloudflare 能到达这里
        proxy_pass http://backend;
    }
}

🔒 ssl_verify_client on; 表示强制验证客户端证书,未提供或无效则返回 400 Bad Request


✅ 五、在 Cloudflare 后台启用该功能

  1. 登录 Cloudflare Dashboard
  2. 进入你的站点 → SSL/TLSOrigin Server
  3. 找到 “Authenticated Origin Pulls”
  4. 开启 “Enable Authenticated Origin Pulls”

🟢 一旦开启,Cloudflare 所有回源请求都会自动携带客户端证书。


⚠️ 六、注意事项

  1. 不要与 IP 白名单冲突:建议保留 IP 白名单作为第二道防线
  2. 仅适用于 HTTPS 回源:如果源站是 HTTP,此功能无效
  3. 调试困难:直连源站会失败(正常现象),测试需通过 Cloudflare 域名
  4. 证书无需更新authenticated_origin_pulls_ca.pem 长期有效(官方未设过期)

✅ 七、验证是否生效

  1. 通过 https://yourdomain.com 访问 → 应正常
  2. 直接 curl -k https://your-server-ip → 应返回 400 No required SSL certificate was sent
  3. 查看 Nginx 错误日志:
    tail -f /var/log/nginx/error.log
    
    如果看到 client SSL certificate verify error,说明配置生效

总结

问题答案
authenticated_origin_pull_ca.pem 是什么? Cloudflare 的客户端证书根 CA,用于验证“请求方是否真是 Cloudflare”
origin-pull-ca.pem 有什么区别? 前者用于验证 Cloudflare,后者用于验证源站,方向相反
需要同时使用吗? 推荐!配合 IP 白名单,实现三层防护:IP + 源站证书 + Cloudflare 客户端证书
配置关键是什么? Nginx 中设置 ssl_verify_client on; + 正确指定 CA 文件

🔐 启用 Authenticated Origin Pulls 后,即使你的源站 IP 泄露,攻击者也无法直接建立有效 HTTPS 连接 —— 这是目前最高等级的源站保护方案之一

如果你需要,我可以提供完整的 Nginx 配置模板(含 Let’s Encrypt + Authenticated Origin Pulls + IP 白名单)。

posted @ 2026-01-04 12:35  rebeca8  阅读(19)  评论(0)    收藏  举报