我们需要使用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机器上尝试过,并尝试使用命令行选项播放,但无济于事。有没有人打过这个问题?
我一直在试图做这个确切的事情,并发现以下是诀窍。此方法依赖于使用两个Authenticode证书,一个用于SHA-1,另一个用于SHA-256,以确保文件被Windows Vista和Windows Server 2008接受为不受SHA-256证书签名的Windows Server 2008即使使用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"
请注意,使用/ sha1开关为每个签名步骤显式指定SHA-1指纹,并且/用作附加SHA-256签名的SHA-1指纹。否则SHA-256签名将覆盖SHA-1签名。
在这个过程中发现的另一个问题是只有DLL和EXE支持双重签名。 MSI安装程序没有。
29/12/15更新:
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"
30/12/2015更新
要使用SHA-256证书签名具有SHA-1哈希的MSI文件,请使用类似以下命令:
signtool.exe sign /sha1 SHA256_Thumprint /v /d "FileDescription" /du "CompanyURL" /t http://timestamp.comodoca.com/authenticode "FileName.msi"