Azure DevOps使用Artifactory服务连接下载制品报x509证书未知签发错误如何解决
Azure DevOps Artifactory服务连接x509证书报错解决方案
报错原文:[error] Post https://art..... : x509 certificate signed by unknown authority
根因说明
该错误本质是Azure DevOps Agent的运行环境无法信任Artifactory服务端使用的TLS证书,通常是证书为自签名证书、企业内部CA签发的自定义证书导致。之前PowerShell脚本能正常运行,一般是因为脚本内置了跳过证书校验的逻辑,或者脚本运行的环境已经提前导入了对应的根证书。
解决方案
场景1:使用自托管Azure DevOps Agent
- 首先导出Artifactory服务端的完整证书链(包含根CA证书、中间证书,如果有多层签发的话),保存为
CER或PEM格式文件 - 登录自托管Agent所在服务器,将证书导入到系统的受信任的根证书颁发机构存储中,完成后重启Agent服务:
- Windows系统:双击证书文件,选择「安装证书」→「本地计算机」→「受信任的根证书颁发机构」,按引导完成导入后重启
Azure Pipelines Agent服务 - Linux系统:将证书文件移动到
/usr/local/share/ca-certificates/目录下,执行sudo update-ca-certificates命令,再重启Agent进程 - macOS系统:双击证书文件打开钥匙串访问,将证书的信任策略修改为「始终信任」,再重启Agent进程
- Windows系统:双击证书文件,选择「安装证书」→「本地计算机」→「受信任的根证书颁发机构」,按引导完成导入后重启
- 测试环境临时方案:可以直接在Artifactory服务连接的配置页开启「忽略SSL证书错误」选项,生产环境不推荐该操作,会降低通信安全性。
场景2:使用微软托管Azure DevOps Agent
微软官方提供的托管Agent不会默认信任用户自定义的证书,需要在流水线执行过程中主动注入证书:
- 将导出的Artifactory根CA证书以**安全文件(Secure File)**的形式上传到Azure DevOps项目的「库」中
- 在流水线的Artifactory下载任务之前,添加步骤将安全文件中的证书导入到Agent的信任存储:
- Windows托管Agent执行PowerShell命令:
$certPath = "$(Agent.TempDirectory)/artifactory-root.cer" Import-Certificate -FilePath $certPath -CertStoreLocation Cert:\LocalMachine\Root- Linux托管Agent执行Shell命令:
sudo cp $(Agent.TempDirectory)/artifactory-root.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates - 执行后续的Artifactory下载任务即可。
注意事项
- 导出证书时要导出完整的根证书,不要仅导出站点的叶子证书,否则仍然会触发校验失败
- 如果Artifactory前端有反向代理/CDN,要导出对外提供服务的域名对应的证书,不要导出后端内部服务的证书
内容的提问来源于stack exchange,提问作者Abhinandan RK
相关产品推荐
相关产品推荐

