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

火山引擎 最新活动