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

reqwest请求自签名本地CA服务报CAUsedAsEndEntity错误该如何解决?

问题根因

你当前直接将CA根证书作为HTTPS服务端的终端实体证书部署使用,该证书的X509v3扩展中明确标记了CA:TRUE,密钥用途仅为Certificate Sign, CRL Sign,这类证书只能用于签发下级证书,不能直接作为服务端证书对外提供HTTPS服务,因此客户端校验时会抛出CAUsedAsEndEntity错误。


方案1:临时绕过报错(仅测试环境使用)

你可以在构造reqwest客户端时关闭证书合法性校验,代码示例:

let client = reqwest::Client::builder()
    .danger_accept_invalid_certs(true)
    .build()?;

注意:该配置会跳过所有证书合法性校验,存在中间人攻击风险,绝对不能用于生产环境。


方案2:重新签发证书彻底解决问题

你需要使用现有自签名CA签发一张专门用于服务端的终端实体证书,操作步骤如下:

  1. 生成服务端证书的私钥和CSR(证书签名请求):
  • 生成服务端私钥:openssl genrsa -out server.key 2048
  • 生成CSR,Common Name填写你的服务域名testserver.com:openssl req -new -key server.key -out server.csr
  1. 新建服务端证书扩展配置文件server.ext,内容如下:
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = DNS:testserver.com
  1. 用现有CA根证书和私钥签发服务端证书:
openssl x509 -req -in server.csr -CA 你的CA证书路径.crt -CAkey 你的CA私钥路径.key -CAcreateserial -out server.crt -days 3650 -sha256 -extfile server.ext
  1. 替换服务端部署的证书:将新生成的server.crt和server.key替换当前服务使用的CA证书及对应密钥
  2. (可选)客户端添加CA信任:如果不需要跳过证书校验,可将自签名CA证书添加到Ubuntu系统信任库,reqwest会默认读取系统信任列表完成校验:
  • 将CA证书复制到系统信任目录:sudo cp 你的CA证书路径.crt /usr/local/share/ca-certificates/
  • 执行更新信任库命令:sudo update-ca-certificates

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:45:04