使用AzureSignTool签名MSI成功但根证书不受信任的问题求助
解决Azure可信签名后证书不被信任的问题
问题概述
使用Azure Trusted Signing对Briefcase打包的MSI文件签名成功,但用户运行时仍提示“未验证发布者”,文件属性显示“证书链已处理,但终止于不受信任提供程序信任的根证书”,证书路径仅显示自身名称且带红叉。
排查与解决步骤
确认证书类型与信任基础
检查Azure Trusted Signing配置的证书是公共可信CA颁发还是私有CA颁发:- 若为私有CA证书:客户端系统默认不会信任私有根证书,必须将对应的根证书和中间证书导入客户端的“受信任的根证书颁发机构”存储中,可通过手动导入或组策略批量部署。
- 若为公共CA证书:确认该CA的根证书是否在客户端系统的默认信任列表中,若不在可能是根证书过期或被吊销,需在Azure仪表板中核实证书的有效性状态。
验证证书链完整性
使用Windows自带的signtool工具执行以下命令,查看签名的证书链详细信息:signtool verify /pa /v "C:\Users\corre\EyePrecisionBasic\eyeprecisionbasic\dist\Eye Precision Basic-1.0.4.msi"若输出显示缺少中间证书,需:
- 在Azure Trusted Signing的证书配置文件中,确保已上传完整的证书链(根证书+中间证书);
- 重新签名时,给AzureSignTool添加
-ac参数指定中间证书文件路径,确保签名时嵌入完整证书链。
检查客户端根证书信任状态
在出现警告的客户端机器上,打开certmgr.msc:- 展开“受信任的根证书颁发机构”→“证书”;
- 查找Azure Trusted Signing使用的根证书,若不存在则手动导入该根证书;
- 导入后重新查看MSI文件的数字签名,确认证书链是否正常显示。
优化签名命令参数
确保AzureSignTool签名命令包含以下关键参数:-pa:指定使用代码签名的增强密钥用法,符合Windows系统的代码签名信任要求;- 有效的公共时间戳服务器(如
-ts http://timestamp.digicert.com),确保时间戳的证书链也被客户端信任。
内容的提问来源于stack exchange,提问作者Robbie Correll
相关产品推荐
相关产品推荐

