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

如何配置证书颁发者为Microsoft测试根证书机构解决signtool验证失败

签名验证失败问题解决方案

错误根因

你看到的报错SignTool Error: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider本质是两个问题叠加:

  • 你用makecert生成的KM_test1是自签名根证书,没有被加入系统受信任的根证书颁发机构存储,系统默认不信任该证书签发的所有内容
  • 你执行验证命令时没加/pa参数,默认走的是内核驱动签名校验策略,对证书链的要求和普通用户态DLL不同

你设想的「将证书颁发者设置为Microsoft Testing Root Certificate Authority 2010」的思路不可行:你没有该微软测试根证书的私钥,根本无法签发出归属该合法证书链的终端签名证书,伪造的证书链会直接被校验逻辑拦截。你手中的correctFile.dll能验证通过,是因为对应的微软测试根证书默认预置在系统受信任根存储中,且证书链是微软官方持私钥签发的合法链。


可行修复方案

根据你的使用场景二选一即可:

方案1:本地/内部测试场景(操作最简)

把你自己生成的自签根证书导入系统受信任存储,验证时加对应参数即可:

  • 找到你生成的KM_test1.cer文件,右键选择「安装证书」
  • 存储位置选择本地计算机(需管理员权限),点击下一步
  • 选择「将所有证书放入下列存储」,点击浏览选中「受信任的根证书颁发机构」,完成导入
  • 重新执行验证命令,必须加/pa参数指定使用用户态代码签名验证策略:
signtool verify /pa /debug "myfile.dll"

执行后即可通过校验。

方案2:适配项目固定证书链校验逻辑

如果你的项目硬编码校验签名链必须匹配微软测试证书的层级名称,可以本地生成一套同名证书链,再把自生成的根证书导入受信任存储:

  • 生成同名自签名根证书,直接放入受信任根存储:
makecert.exe -r -pe -ss Root -n "CN=Microsoft Testing Root Certificate Authority 2010" MS_Test_Root.cer
  • 基于根证书签发二级CA证书,对应Microsoft Testing PCA 2010节点:
makecert.exe -pe -ss CA -n "CN=Microsoft Testing PCA 2010" -is Root -in "Microsoft Testing Root Certificate Authority 2010" MS_Test_PCA.cer
  • 基于二级CA签发终端代码签名证书,对应Microsoft Windows Publisher节点,加上代码签名增强型密钥用法:
makecert.exe -pe -ss My -n "CN=Microsoft Windows Publisher" -is CA -in "Microsoft Testing PCA 2010" -eku 1.3.6.1.5.5.7.3.3 MS_CodeSign.cer
  • 用新生成的终端证书重新签名目标DLL:
signtool sign /fd sha1 /n "Microsoft Windows Publisher" "myfile.dll"
  • 执行带/pa参数的验证命令即可通过。

注意事项

  • 上述自生成的证书仅在你手动导入了根证书的设备上可信,拷贝到其他未导入根证书的设备上依然会报不信任错误
  • 如果需要在公开环境分发签名后的文件,需要向具备公开信任资质的CA机构购买正规代码签名证书
  • makecert.exe已属于过时工具,Win10及以上系统推荐使用PowerShell内置的New-SelfSignedCertificate命令生成自签名证书

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:45:33