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

使用Cloudenity的mTLS认证请求令牌时遇400错误求助

解决Cloudflare代理下Cloudentity mTLS客户端认证失败问题

问题分析

你遇到的400错误提示client must provide x509 certificate,核心原因是后端Cloudentity没有接收到你的客户端证书——因为请求经过Cloudflare代理,默认情况下Cloudflare不会透传客户端证书给源站,或者你的curl命令存在配置疏漏。

步骤1:修正curl命令参数

先确保你的curl请求正确传递证书:

  • 若客户端密钥设置了密码,需添加--pass <密钥密码>参数
  • 确保cert.pem包含完整的证书链(客户端证书+中间CA证书),而非仅客户端证书
  • 可尝试将证书和密钥打包为PKCS#12格式(更可靠),命令示例:
    # 先将证书和密钥转为p12格式(需设置密码)
    openssl pkcs12 -export -out client.p12 -inkey key.pem -in cert.pem -certfile ca.pem
    
    # 使用p12文件发起请求
    curl --request POST \
      --url https://xxx.authz.cloudentity.io/xxx/oauth2/token \
      --header 'Content-Type: application/x-www-form-urlencoded' \
      --data grant_type=client_credentials \
      --data client_id=xxx \
      --cacert ca.pem \
      --cert client.p12:<你的p12密码>
    

步骤2:配置Cloudflare端到端mTLS

要让Cloudentity接收到客户端证书,需在Cloudflare配置Authenticated Origin Pulls和客户端证书透传:

  • 开启Authenticated Origin Pulls:让Cloudflare将客户端证书以X-Forwarded-Client-Cert请求头的形式转发给后端Cloudentity
  • 在Cloudflare的SSL/TLS设置中,将客户端证书模式设为**"Require"**,确保所有请求必须携带客户端证书才能通过Cloudflare
  • 配置Cloudflare信任你的客户端CA,这样Cloudflare会先验证客户端证书的合法性,再透传给后端

步骤3:调整Cloudentity配置

在Cloudentity的应用设置中,开启代理模式下的证书读取:

  • 配置Cloudentity信任Cloudflare的CA,确保后端接受Cloudflare转发的请求
  • 设置Cloudentity从X-Forwarded-Client-Cert头中提取客户端证书,而非直接从TLS握手获取

验证命令(带调试日志)

添加-v参数查看TLS握手细节,确认证书是否被正确发送:

curl -v --request POST \
  --url https://xxx.authz.cloudentity.io/xxx/oauth2/token \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data grant_type=client_credentials \
  --data client_id=xxx \
  --cacert ca.pem \
  --cert cert.pem \
  --key key.pem

查看输出中的SSL connection using部分,确认客户端证书是否被成功发送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:42:53