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

Docker Jenkins-slave容器内cURL请求HTTPS证书验证失败问题

问题排查与解决

1. 证书格式或后缀不兼容

update-ca-certificates工具默认仅识别PEM格式且后缀为.pem的证书文件。你当前使用的.cer文件可能是DER格式,或者后缀不符合要求,导致工具未将其加入系统信任链。

解决步骤:

  • 若证书为DER格式,先转换为PEM格式:
    openssl x509 -inform der -in certificate.cer -out certificate.pem
    
  • 将转换后的.pem文件放入/usr/local/share/ca-certificates/目录
  • 重新执行信任链更新:
    update-ca-certificates
    
    执行后若输出包含“1 added”类提示,说明证书已被成功加入信任链。

2. 执行更新时权限不足

Jenkins-slave容器通常以jenkins普通用户运行,而更新系统证书需要root权限。如果之前用普通用户执行操作,证书并未真正更新到系统信任库。

解决步骤:

  • 切换至root用户执行操作:
    sudo su
    # 若容器无sudo,可通过docker exec -u root进入容器
    
  • 重新执行证书安装与信任链更新流程。

3. 错误使用--cert参数

curl --cert是用来指定客户端证书(供服务器验证你的身份),而当前问题是需要让curl信任服务器的CA证书,应使用--cacert参数指定信任的证书文件:

# 直接指定证书文件测试
curl --cacert /usr/local/share/ca-certificates/certificate.pem https://mytool.domain.com

若此命令生效,说明系统信任链的更新仍有问题,回到前序步骤检查。

4. 容器CA证书链未生效

部分轻量Jenkins-slave镜像(如基于alpine的),默认CA证书路径或update-ca-certificates行为与debian/ubuntu存在差异。可手动指定curl的CA路径:

# 设置环境变量让curl使用系统信任链
export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
curl https://mytool.domain.com

5. 证书链不完整

容器外部请求正常说明证书有效,但你复制到容器内的可能仅是服务器证书,缺失中间CA证书层级。需确保放入容器的是完整的证书链(从服务器证书到根CA的所有层级)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:53:26