signtool 双重签名失败

signtool Dual Signing Failure

关于尝试使用 SHA1/SHA256 双签名时遇到的失败问题。

我已经有几年的 SHA256 代码签名证书了,但在新的一年 (2016) 之前,我开始使用 /fd SHA256 作为哈希算法以符合 Microsoft 对 SHA1 的弃用。

这工作正常,但签名哈希当然不能在旧的 OS 上验证。我不关心 XP,但我还是有点关心 Vista。

我首先使用以下方法签署 SHA1:

signtool sign /fd SHA1 /f "cert.pfx" /p "password" /t http://timestamp.verisign.com/scripts/timsetamp.dll "file"

然后我试试我的双重签名:

signtool sign /as /fd SHA256 /f "cert.pfx" /p "password" /tr http://timestamp.globalsign.com/?signature=sha2 "file"

signtool 给了我这个:


Done Adding Additional Store
SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2147024846/0x80070032)
</pre>

现在我可以使用单一算法(SHA1 或 SHA256)成功地对文件进行签名,但我无法添加第二个签名。我唯一的猜测是,因为我对两种算法都使用相同的证书,所以它不喜欢那样。我是否需要为每种算法提供不同的物理证书?

只是想知道,因为在新的一年之前,我多年来一直使用 SHA256 证书和 SHA1 算法,并且它在所有操作系统上都经过验证。

这是来自不匹配的 dll。 signtool.exe 需要正确的 wintrust.dll 和 mssign32.dll 否则我只会在双重签名时得到 0x80070032。 此站点有 8.1 下载,因此您不需要整个 SDK http://ksoftware.freshdesk.com/support/solutions/articles/17170-how-do-i-use-ksign-to-digitally-sign-files- signtool 8.1 在 http://cdn1.ksoftware.net/signtool_8.1.zip

我遇到了同样的问题,SDK 8.1 (6.3.9600.17298) 的 signtool 似乎对命令行选项的顺序非常讲究!

如果我用signtool sign /v /f my.pfx /p 1234 /fd sha256 /as test.exe

Dual-signing 失败并出现此错误: "Multiple signature support is not implemented for this filetype"
这实际上与 W10 SDK 中的错误相同,因为 -2147024846/0x80070032 转换为 (HRESULT)ERROR_NOT_SUPPORTED

但是,如果我使用 signtool sign /v /f my.pfx /p 1234 /as /fd sha256 test.exe 成功了!

看到我在那里做了什么吗?我只是调换了 /as 和 /fd sha256 的顺序!

我的意思是当你在做一些重要的事情时,这些东西只是噩梦燃料,然后当它需要生产时,它似乎无缘无故地不起作用。幸运的是,这次情况并非如此,因为我只是在测试,但自从我第一次让它工作以来,我以为我要疯了,但后来没有了。

需要说明的是,这是我如何 dual-sign 使用 SHA1 和 SHA256 文件的确切顺序,使用来自 Windows 8.1 SDK 的 signtool.exe,可用 here (W10 SDK的还是不行,V7.1 SDK的根本不支持多重签名)

  1. 使用 SHA1 签名:signtool sign /v /f my.pfx /p 1234 test.exe
  2. 使用 SHA256 签名:signtool sign /v /f my.pfx /p 1234 /as /fd sha256 test.exe