signtool无法双重签名SHA2和SHA1带有时间戳
我们需要使用signtool.exe对SHA1和SHA2进行双重签名,我们的证书支持256位SHA2。signtool无法双重签名SHA2和SHA1带有时间戳
使用Windows 8 SDK的signtool:
如:
signtool.exe标志/为/ FD SHA256 /吨http://timestamp.verisign.com/scripts/timstamp.dll/F “certificate.pfx”/ P XXXXXXX “file.dll”
(其中XXXXXXX是我们的证书密码)
失败与神秘的错误:
SignTool错误:SignedCode ::注册返回错误:0x80070057 该参数不正确。 SignTool错误:尝试签名时发生错误:file.dll
没有时间戳签名的作品,单独签名为SHA1或SHA256的作品,但我们需要双重签名,并且想象没有时间戳是一个不。
我试过了32位和64位版本的signtool.exe,在Win7和Win8机器上试过它,并尝试使用命令行选项,但无济于事。有没有人有过这个问题?
使用try
signtool.exe sign /as /fd sha256 /tr http://timestamp.geotrust.com /td sha256 /f certificate.pfx /p XXXXXX file.dll
/TR是RFC3161时间戳,/ TD显然对哈希使用。
我也得到了上面的错误,但是它使用“-nest”选项时,工作原理与osslsigncode实用程序:
osslsigncode sign -pkcs12 cert1.pfx -h sha1 -t http://timestamp.verisign.com/scripts/timestamp.dll -in original.exe -out intermediate.exe
osslsigncode sign -pkcs12 cert2.pfx -nest -h sha1 -t http://timestamp.verisign.com/scripts/timestamp.dll -in intermediate.exe -out final.exe
正式项目是为Unix,但我已经敲了我自己的windows fork 。
我一直在努力做到这一点确切的事情,并发现下面的伎俩。此方法依赖于使用两个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"
注意,SHA-1指纹被明确地使用/sha1
开关的每个签名步骤中指定和/as
用于追加的SHA-256签名。否则,SHA-256签名将覆盖SHA-1签名。
我在过程中发现的另一个问题是只有DLL和EXE支持双重签名。 MSI安装程序不。
更新29/12/15:
的SHA-1/SHA-256指纹的格式是一个40字符的十六进制大写字符串没有空格。例如:
signtool.exe sign /sha1ABCDEFABCDEF/as /v /d "FileDescription" /du "CompanyURL" /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 "FileName.dll"
更新30/12/2015
要登录MSI文件与SHA-256证书,但与SHA-1哈希使用类似下面的命令:
signtool.exe sign /sha1 SHA256_Thumprint /v /d "FileDescription" /du "CompanyURL" /t http://timestamp.comodoca.com/authenticode "FileName.msi"
添加到martin_costello答案,XP和Vista不支持RFC时间戳。您需要对sha1签名使用/ t选项。
signtool.exe sign /sha1 SHA1_Thumprint /v /d "FileDescription" /du "CompanyURL" /fd sha1 /t http://timestamp.verisign.com/scripts/timestamp.dll "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"
我知道这是一个有点老了,但我降落在这个线程,也许别人也会这样做的。
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
它的工作使用这两个标记相同的证书:
如果您第一次使用SHA1,然后签订SHA256它将工作。我使用Windows 10 SDK中的signtool,不知道它是否适用于以前的版本。
谢谢,这有帮助!只要我按照这个顺序完成了它,它就可以为我和MIS使用signtool Windows 8.1 SDK。 MSI在Windows 2008上显示可信。 –
[This](http://support.ksoftware.net/support/solutions/articles/215805-the-truth-about-sha1-sha-256-and-code-signing-certificates - )说:“请注意,你确实需要Signtool的6.3版本才能做到这一点。它带有Windows 8.1 SDK“。 – Legolas
我认为this link有一些不错的指针。其中一些在martin_costello的答案中提到,但本文提供了一些更多细节。特别是:
- 如果您首先对SHA1签名,并使用/作为SHA256,则可以使用“双重签名并包含SHA1文件摘要”。它只适用于Windows 8.1 SDK(或更高版本)中的signtool v6.3。
- 对于XP sp3之前的Windows版本,需要使用'完整SHA1签名'进行双重签名,需要2个不同的证书。
(我还没有测试,虽然这一切我自己。)
的问题实际上是这样简单。
问题出在时间戳服务器上。
而不是使用signtool.exe本
/t http://timestamp.comodoca.com
您需要使用像这样的SHA1
/tr http://timestamp.comodoca.com /td sha1
而对于SHA256
/tr http://timestamp.comodoca.com/?td=sha256 /td sha256
这是否意味着的,你需要购买两个不同的证书?还是足够复制和重命名? –
是的,不幸的是(除非有人知道更好)。我无法获得用于生成SHA-1签名的SHA-256证书,以便在Windows Server 2008上接受为有效。 –
您有可能使用指纹的*格式进行更新?简单地从certmgr.msc复制字符串不起作用。 – EricLaw