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

如何关联Windows证书签名算法与SignTool参数并解决签名报错

ClickOnce签名脚本更新问题排查

核心参数对应关系

先明确SignTool两个易混参数的作用,和查到的证书属性对应如下:

  • /fd:指定生成文件签名时使用的摘要哈希算法,对应证书详情里看到的签名哈希算法项,当前填的sha384是匹配的,不需要改。
  • /td:指定请求RFC3161时间戳时,时间戳服务返回签名使用的哈希算法,这个不属于证书本身的属性,和证书签名哈希算法保持一致填sha384即可,当前参数值配置正确。
  • 看到的指纹算法是系统计算证书指纹(证书唯一标识)用的哈希规则,仅在通过指纹指定证书时作为标识的计算规则使用,不属于签名流程的算法配置项,单证书场景不需要单独为它配置参数。

报错根因

当前执行命令报的##[错误]SignTool 错误:未找到满足所有给定条件的证书,核心原因是命令里没有明确指定要使用的签名证书:
现有命令里的$hash变量未做有效赋值,SignTool在没有明确指定证书的情况下,会自动在证书存储里匹配满足「有代码签名用途、私钥可访问、主题与被签名文件匹配」的证书,匹配不到就会抛出这个错误。

修复步骤

  1. 打开证书管理器,找到导入的新签名证书,在详情页找到「指纹」字段,复制其中的十六进制字符串,删掉所有空格和开头可能带有的不可见特殊字符,存为变量:
    $certThumbprint = "粘贴你处理完的证书指纹字符串"
    
  2. 修改签名命令,加上/sha1参数通过指纹明确指定要使用的证书,删掉无效的$hash变量,修正后的命令如下:
    Get-AuthenticodeSignature *.exe,*.dll | Where-Object Status -eq NotSigned | ForEach-Object Path | ForEach-Object {
        & $signtool sign /sha1 $certThumbprint /tr $timestamp /td sha384 /fd sha384 $_
    }
    
  3. 执行前做以下检查避免其他报错:
    • 确认导入证书时勾选了「允许导出私钥」/将私钥一并导入,当前运行脚本的账号对该证书的私钥有读取权限(可在证书右键菜单→所有任务→管理私钥中配置权限)
    • 确认证书存放在「当前用户\个人」或「本地计算机\个人」存储路径下,证书在有效期内,增强型密钥用法包含「代码签名」项
    • 确认使用的SignTool来自Windows 10及以上版本的SDK,老版本SignTool不支持SHA384签名算法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:31:36