Azure发布流水线因TLS/证书问题启动失败求助
Azure发布流水线自托管机器证书验证失败(UNABLE_TO_VERIFY_LEAF_SIGNATURE)修复方案及排查方向
核心错误分析
日志中的UNABLE_TO_VERIFY_LEAF_SIGNATURE错误,本质是Azure Agent依赖的Node.js在与Azure DevOps服务器建立TLS连接时,无法验证证书的完整信任链。结合我方机器正常、客户机器异常的场景,大概率是客户环境的证书信任配置或SSL拦截导致的问题。
修复方案及排查步骤
检查客户环境的SSL拦截设备
确认客户是否启用了企业级防火墙、代理的SSL流量拦截功能。这类设备会替换Azure DevOps的服务器证书,导致机器无法验证。解决方式:- 将Azure DevOps相关域名加入SSL拦截白名单;
- 导出该拦截设备的根证书,安装到客户机器的本地计算机-受信任根证书颁发机构存储。
手动补全Azure DevOps证书链
- 在客户机器上打开浏览器访问你的Azure DevOps组织地址,点击地址栏锁图标,查看证书详情;
- 导出完整证书链(包含根证书和所有中间证书);
- 将证书分别安装到本地计算机-受信任根证书颁发机构和本地计算机-中级证书颁发机构;
- 重启Azure Agent服务。
配置Agent的Node.js证书信任
Azure Agent自带独立Node.js环境,可指定其使用系统证书或自定义证书:- 在Agent安装目录找到
.agent配置文件; - 添加环境变量配置:Linux系统用
export NODE_EXTRA_CA_CERTS=/path/to/your/cert.pem,Windows系统用set NODE_EXTRA_CA_CERTS=C:\path\to\your\cert.pem; - 重启Agent服务。
- 在Agent安装目录找到
验证证书存储权限
确保Azure Agent运行的服务账户(默认是NT SERVICE\AzureDevOpsAgent)对证书存储有读取权限:- 打开mmc控制台,添加「证书」管理单元(选择本地计算机);
- 右键「受信任根证书颁发机构」→「权限」,添加Agent服务账户并赋予读取权限;
- 对「中级证书颁发机构」执行同样操作,重启Agent。
对比我方正常机器的证书配置
导出我方正常自托管机器的根证书和中间证书列表,与客户机器对比,找出缺失的证书并安装,快速定位差异点。
验证工具
- 使用
curl -v https://dev.azure.com/[你的组织名]测试TLS连接,查看证书链是否完整; - 使用
openssl s_client -connect dev.azure.com:443输出证书链详情,确认是否存在中间证书缺失。
注意:
NODE_TLS_REJECT_UNAUTHORIZED=0仅能作为临时测试方案,长期使用会关闭证书验证,带来严重安全风险,不建议保留。
内容的提问来源于stack exchange,提问作者Turkeyplague
相关产品推荐
相关产品推荐

