signtool无法对带有时间戳的SHA2和SHA1进行双重签名

Jos*_*phA 23 windows sha256 authenticode verisign signtool

我们需要使用signtool.exe使用SHA1和SHA2双重签名我们的二进制文件,我们的证书支持256位SHA2.

使用Windows 8 SDK的signtool:

例如:

signtool.exe签名/ as/fd sha256/t http://timestamp.verisign.com/scripts/timstamp.dll/f"certificate.pfx"/ p XXXXXXX"file.dll"

(XXXXXXX是我们的证书密码)

因为神秘错误而失败:

SignTool错误:SignedCode :: Sign返回错误:0x80070057参数不正确.SignTool错误:尝试签名时发生错误:file.dll

在没有时间戳的情况下进行签名,单独签名为SHA1或SHA256可以正常工作,但是我们需要双重签名,并且想象没有时间戳是不行的.

我已经尝试了32位和64位版本的signtool.exe,在Win7和Win8机器上试过它,并尝试使用命令行选项,但无济于事.以前有人打过这个问题吗?

Mar*_*llo 16

我一直试图做到这一点,并发现以下做了伎俩.此方法依赖于使用两个Authenticode证书,一个用于SHA-1,另一个用于SHA-256,以确保Windows Vista和Windows Server 2008接受的文件无效,不支持由SHA-256证书签名即使使用SHA-1算法:

signtool.exe sign /sha1 SHA1_Thumprint /v /d "FileDescription" /du "CompanyURL" /fd sha1 /tr http://timestamp.comodoca.com/rfc3161 /td sha1 "FileName.dll"
signtool.exe sign /sha1 SHA256_Thumprint /as /v /d "FileDescription" /du "CompanyURL" /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 "FileName.dll"
Run Code Online (Sandbox Code Playgroud)

请注意,使用/sha1交换机为每个签名步骤显式指定SHA-1指纹,/as并用于附加 SHA-256签名.否则,SHA-256签名将覆盖SHA-1签名.

我在这个过程中发现的其他问题是只有DLL和EXE支持双重签名.MSI安装程序没有.

2015年12月29日更新:

SHA-1/SHA-256指纹的格式是40个字符的十六进制大写字符串,没有空格.例如:

signtool.exe sign /sha1 0123456789ABCDEF0123456789ABCDEF01234567 /as /v /d "FileDescription" /du "CompanyURL" /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 "FileName.dll"
Run Code Online (Sandbox Code Playgroud)

2015年12月30日更新

要使用SHA-256证书对带有SHA-1哈希的MSI文件进行签名,请使用与以下类似的命令:

signtool.exe sign /sha1 SHA256_Thumprint /v /d "FileDescription" /du "CompanyURL" /t http://timestamp.comodoca.com/authenticode "FileName.msi"
Run Code Online (Sandbox Code Playgroud)


小智 14

我知道它有点老了,但我登陆了这个帖子,也许别人也会这样.

如果先使用SHA1然后使用SHA256进行签名,它将起作用:

signtool.exe sign /f cert_file.pfx /t http://timestamp.comodoca.com/authenticode /p cert_password
signtool.exe sign /f cert_file.pfx /as /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 /p cert_password 
Run Code Online (Sandbox Code Playgroud)

它在两个签名中使用相同的证书.我使用了Windows 10 SDK中的signtool,不知道它是否适用于以前的版本.

  • 谢谢,这有帮助!只要我按此顺序执行,它就可以使用signtool Windows 8.1 SDK为我和MIS工作.MSI在Windows 2008上显示可信任. (2认同)

Dan*_*iev 6

这个问题实际上更简单。

问题出在时间戳服务器上。

而不是与此一起使用signtool.exe

/t http://timestamp.comodoca.com 
Run Code Online (Sandbox Code Playgroud)

您需要像这样将其用于SHA1

/tr http://timestamp.comodoca.com /td sha1
Run Code Online (Sandbox Code Playgroud)

对于SHA256

/tr http://timestamp.comodoca.com/?td=sha256 /td sha256
Run Code Online (Sandbox Code Playgroud)


小智 3

尝试使用

signtool.exe sign /as /fd sha256 /tr http://timestamp.geotrust.com /td sha256 /f certificate.pfx /p XXXXXX file.dll
Run Code Online (Sandbox Code Playgroud)

/tr 用于 RFC3161 时间戳,/td 显然用于要使用的哈希。