我有两个代码签名证书(一个 SHA-1,一个 SHA-256),我想将其应用于同一个文件。我尝试附加 SHA-256 证书,但失败了:
:: Signs with the SHA-1 certificate
signtool sign /sha1 8f52fa9db30525dfabb35b08bd1966693a30eccf /t http://timestamp.verisign.com/scripts/timestamp.dll my_app_here.exe
:: Signs with the SHA-2 certificate
signtool sign /sha1 8b0026ecbe5bf245993b26e164f02e1313579e47 /as /t http://timestamp.verisign.com/scripts/timestamp.dll my_app_here.exe
此操作失败并出现以下错误:
Done Adding Additional Store
SignTool Error: SignedCode::Sign returned error: 0x80070057
The parameter is incorrect.
SignTool Error: An error occurred while attempting to sign: my_app_here.exe
如果我从第二个命令中删除时间戳 URL,签名会成功完成,但 SHA-2 签名没有时间戳。 (无论我是否在第一个签名上加时间戳都没有影响)
此处的目的是允许某人在支持此功能的操作系统上使用更强的证书验证应用程序,但避免在不支持更强的证书(Vista、XP)的操作系统上验证失败。
这种事情可能吗?
SHA-2 Authenticode 签名需要 RFC 3161 时间戳服务器。 timestamp.verisign.com URL 对此不起作用。
Symantec/Verisign 的 RFC 3161 URL 是:
http://sha256timestamp.ws.symantec.com/sha256/timestamp
如果您仍在使用旧的 http://timestamp.geotrust.com/tsa URL,并且它失败了(2017 年 4 月),您应该将其更新为上述 URL。 GeoTrust 与 Verisign 一样,现已成为 Symantec 的一部分。
来源:
https://knowledge.verisign.com/support/code-signing-support/index?page=content&id=SO5820
答案中的时间戳网址在 2024 年 7 月 24 日之后将不再有效
最新时间戳网址为:
注释解释:
2024 年 7 月 24 日 17:00 MDT(23:00 UTC)DigiCert 将关闭我们的旧赛门铁克时间戳服务。如果您或客户在签署可执行文件或文档时使用时间戳,您可能需要在关闭之前将签名工具中的时间戳 URL 更改为较新的 DigiCert 服务,timestamp.digicert.com。