"Invalid SHA1 hash format" 从 msbuild 或命令行调用 signtool 时出错

"Invalid SHA1 hash format" error calling signtool from msbuild or command line

我正在尝试使用 SignTool.exe. Following this answer 在项目构建期间对我的程序集和安装文件进行签名 我想使用 /sha1 选项,这样我就不需要指定证书密码。但是,当我这样做时,出现 "Invalid SHA1 hash format" 错误。我已经从 MSBuild Exec 任务、Visual Studio 开发人员命令提示符和批处理文件中都尝试过,但都出现了相同的错误。

我正在尝试的命令是(显然使用不同的密钥):

signtool.exe sign /a /sha1 ‎1234567890abcdef1234567890abcdef12345678 /tr http://timestamp.comodoca.com /td SHA256 /v Setup.msi

我认为我的证书安装正确并且 SHA1 密钥正确,因为它与 SignFile MSBuild task 一起使用。我只是使用它,但我还需要能够签署我的安装程序文件,这些文件不是使用 MSBuild 构建的,因此需要从批处理脚本中签署。

那可能是什么问题,我该如何解决?

愚蠢的错误,我不敢相信花了这么长时间才意识到。我在指纹字符串之前有一个额外的 space 字符,这是错误的原因。

即使在修复之后我又遇到了另一个错误:

No certificates were found that met all the given criteria.

运行 命令再次使用 /debug 选项列出了它尝试使用的所有证书和

After Hash filter, 0 certs were left.

我想使用的证书的哈希 SHA1 哈希与我指定的完全相同,唯一的例外是哈希全部为大写字母。因此,再次尝试使用所有大写字母中的散列来执行该命令,并且...成功了。

因为我没有在任何地方看到这个要求的文档,所以我想我会在这里提供答案。

我遇到了同样的问题,发现可能有一个隐藏的 UNICODE 字符导致了这个错误。只需将文本复制到一个新的记事本实例,然后再复制回来,它就会起作用。 或者,将光标置于此位置:

/sha1 <cursor>abcdefg

然后按退格键。如果您必须按 BACKSPACE 两次才能将光标移到“/sha1”指令旁边,则有一个不可见的字符。然后只需输入 space 即可。

我通过在构建命令本身中提供指纹解决了这个问题,如下所示:

msbuild /restore /t:Publish /p:TargetFramework=net6.0-windows10.0.19041 /p:configuration=release /p:PackageCertificateThumbprint=897C9032E6BD06D32A315173D09C93B06CBDE1B4

从 .csproj 中删除指纹,它应该如下所示。

<PackageCertificateThumbprint></PackageCertificateThumbprint>