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

执行curl命令遇self signed certificate in certificate chain错误的解决方法

解决curl "self signed certificate in certificate chain" 错误的实用方案

这个问题我日常调试中碰到过好多次,本质就是curl默认不信任目标服务器的自签名证书,或者服务器的证书链不完整导致验证失败。下面给你分场景整理了几种解决办法:

1. 临时跳过证书验证(仅测试环境用!)

如果只是临时测试接口,不想折腾证书配置,可以直接让curl忽略证书检查:

curl -k https://your-target-url.com
# 或者用完整参数写法
curl --insecure https://your-target-url.com

⚠️ 重要提醒:这个方法会跳过所有证书验证,绝对不能在生产环境使用,会暴露你的请求被中间人攻击的风险!

2. 永久信任目标服务器的自签名证书(生产环境推荐)

如果需要长期访问这个服务器,正确的做法是把它的证书加入系统信任列表,或者在curl中指定信任该证书:

步骤1:获取目标服务器的证书

用openssl命令从服务器导出证书:

openssl s_client -showcerts -connect your-target-url.com:443 </dev/null 2>/dev/null | openssl x509 -outform PEM > target-server-cert.pem

这个命令会连接目标服务器的443端口,提取并保存证书为PEM格式的文件。

步骤2:添加到系统信任列表(全局生效)

  • Linux系统:把证书文件放到/usr/local/share/ca-certificates/目录,然后更新证书缓存:
    sudo cp target-server-cert.pem /usr/local/share/ca-certificates/
    sudo update-ca-certificates
    
    之后curl访问该服务器时就会自动信任证书了。
  • macOS系统:双击证书文件,在弹出的钥匙串访问中选择“系统”钥匙串,然后设置该证书的信任为“始终信任”。

步骤3:仅给curl指定证书(局部生效)

如果不想修改系统全局证书,可以每次curl时指定信任的证书文件:

curl --cacert target-server-cert.pem https://your-target-url.com

3. 检查并修复证书链不完整问题

有时候报错不是因为自签名,而是服务器缺少中间证书,导致curl无法完成整个证书链的验证。可以用下面的命令查看证书链详情:

openssl s_client -connect your-target-url.com:443

如果输出中出现untrusted或者verify return code: 21 (unable to verify the first certificate),说明需要把中间证书和根证书合并成一个PEM文件,然后按照上面的方法添加信任即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:30:06