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" 
+0

这是否意味着的,你需要购买两个不同的证书?还是足够复制和重命名? –

+1

是的,不幸的是(除非有人知道更好)。我无法获得用于生成SHA-1签名的SHA-256证书,以便在Windows Server 2008上接受为有效。 –

+1

您有可能使用指纹的*格式进行更新?简单地从certmgr.msc复制字符串不起作用。 – EricLaw

添加到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,不知道它是否适用于以前的版本。

+2

谢谢,这有帮助!只要我按照这个顺序完成了它,它就可以为我和MIS使用signtool Windows 8.1 SDK。 MSI在Windows 2008上显示可信。 –

+0

[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