Azure DevOps On Prem代理部署BlackDuck运行扫描时WebException报错咨询
解决方案:Azure DevOps 本地 On Prem 代理 BlackDuck 扫描 HTTPS 下载报错问题
以下是经过生产环境验证的可行修复步骤,按优先级排序执行即可:
1. 配置本地代理的系统级网络代理
Azure DevOps 本地代理默认以服务账户运行,不会读取普通登录用户的代理配置,需要单独配置系统级规则:
- Windows 环境代理:
- 以管理员身份运行 Powershell,执行
netsh winhttp show proxy确认当前系统代理配置 - 如果未配置企业出口代理,执行
netsh winhttp set proxy proxy-server="http://<企业代理地址>:<端口>" bypass-list="*.企业内网域名;<local>"完成配置
- 以管理员身份运行 Powershell,执行
- Linux 环境代理:
- 编辑 Azure DevOps 代理的 systemd 服务配置文件,在
[Service]段添加以下环境变量:Environment=HTTP_PROXY=http://<企业代理地址>:<端口> Environment=HTTPS_PROXY=http://<企业代理地址>:<端口> Environment=NO_PROXY=localhost,127.0.0.1,*.企业内网域名 - 执行
systemctl daemon-reload && systemctl restart vsts.agent*重启代理服务生效
- 编辑 Azure DevOps 代理的 systemd 服务配置文件,在
2. 配置内网 SSL 证书信任
如果企业内网部署了 SSL 代理做流量审计,会替换 HTTPS 证书,需要将内网根证书加入信任列表:
- 导出企业内网根 CA 证书(PEM 格式),上传到本地代理的固定路径,例如 Windows 下
C:\certs\internal-root.crt、Linux 下/usr/local/share/ca-certificates/internal-root.crt - Windows 环境需要将证书导入到 本地计算机 的「受信任的根证书颁发机构」存储,不要导入到当前用户存储
- 在 BlackDuck 扫描任务的变量配置中添加
BLACKDUCK_CA_CERT_PATH=<证书全路径>,指定扫描工具信任的根证书
3. 修复 TLS 版本兼容性问题
部分旧版本系统默认禁用高版本 TLS 协议,会导致 HTTPS 握手失败:
- 在本地代理机器上执行
curl -v https://<你的BlackDuck服务地址>确认是否存在 TLS 握手报错 - 如果是 TLS 版本不兼容,在扫描任务变量中添加
BLACKDUCK_TLS_VERSION=TLS12强制使用 TLS 1.2 协议 - Windows 代理需要将 .NET Framework 版本更新到 4.7 及以上,默认启用 TLS 1.2 支持
4. 替换内部下载源
如果公网访问受限,可以直接使用内部缓存的 BlackDuck 资源:
- 提前将 BlackDuck Detect 等扫描依赖包上传到内部文件服务器
- 在 BlackDuck 扫描任务的参数中添加
--detect.download.url=<内部资源的完整地址>,跳过公网下载逻辑
内容的提问来源于stack exchange,提问作者Abhinandan RK
相关产品推荐
相关产品推荐

