You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C/C++使用CURL对CloudFlare站点做主机及对等端验证相关问题

根因说明

你此前下载的origin_ca_rsa_root.pem、origin_ca_ecc_root.pem等证书属于Cloudflare Origin CA根证书,仅用于Cloudflare边缘节点验证你的源站服务证书,完全不适用于客户端侧校验Cloudflare边缘节点返回的公网证书,这是你校验失败的核心原因。

可行解决方案

按你的使用场景可选以下方案:

  • 通用场景(需访问任意Cloudflare站点)
    Cloudflare边缘节点的公网证书均由全球公共信任CA签发,直接让CURL使用系统内置的CA根证书包即可完成校验,无需单独指定Cloudflare相关证书。如果Windows环境下CURL未默认加载系统CA,可使用curl官方维护的公共CA根证书包,即可覆盖所有Cloudflare站点的校验需求。
  • 限定信任场景(仅信任Cloudflare相关CA)
    如果你需要缩小信任范围、仅允许访问Cloudflare托管的站点,可以收集Cloudflare公开用于签发边缘节点证书的所有根CA、中间CA,合并为单个PEM文件传入CURLOPT_CAINFO_BLOB参数即可。目前Cloudflare用于签发边缘公网证书的CA包含Digicert、GlobalSign、Let's Encrypt等机构的多个根证书,你可以从Cloudflare官方公开的说明中导出对应证书合并使用。
  • 固定站点场景(仅访问少量指定Cloudflare站点)
    如果你只需要访问特定几个Cloudflare站点,更安全的方案是使用公钥钉选:提取目标站点证书的公钥哈希,通过CURL的CURLOPT_PINNEDPUBLICKEY参数配置即可,不需要校验完整证书链,也不会受证书更新、CA轮转的影响。
调试验证方法

使用以下openssl命令可以验证你准备的CA文件是否可用:

# 替换your.domain为实际访问的域名,your_ca.pem为你的CA文件路径
openssl s_client -connect your.domain:443 -CAfile your_ca.pem

返回结果中出现Verify return code: 0 (ok)即代表校验正常。

此前单站点证书不通用的原因

你从单个站点提取的是站点的叶子证书或对应专属中间CA,仅对该站点或该中间CA签发的小范围站点有效,无法覆盖Cloudflare所有站点使用的不同CA签发的证书。

内容的提问来源于stack exchange,提问作者Mecanik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:15:01