Signtool.exe /dg /ds /di 选项和时间戳

6
我们正在优化数字签名流程,使用signtool.exe摘要选项。目前的工作流程如下:
  1. 在客户端上创建摘要:signtool.exe sign /f cert /fd sha256 /dg . MyFile.dll
  2. MyFile.dll.dig摘要发送到我们的签名服务器。
  3. 在签名服务器上对摘要进行签名:signtool.exe sign /f cert /fd sha256 /ds MyFile.dll.dig
  4. 将签名MyFile.dll.dig.signed发送回客户端。
  5. 在客户端上创建签名:signtool.exe sign /di .MyFile.dll
  6. 在客户端上添加时间戳:signtool.exe timestamp /tr http://some_timestamp_server /td sha256 MyFile.dll
有没有一种方法可以在签名服务器上执行时间戳操作?

你为什么不能在签名服务器上执行时间戳? - Progman
什么是命令?signtool.exe timestamp ... MyFile.dll?MyFile.dll从未发送到签名服务器。 - Alex I
为什么你不将MyFile.dll文件发送到签名服务器,使用你在问题中编写的命令来应用时间戳呢? - Progman
由于文件大小可能会达到数百兆字节。而 .dig 和 .deg.signature 文件非常小,不到 1K。 - Alex I
当我尝试在本地复制这个时,似乎需要一个在步骤1中创建的p7u文件。你有同样的行为吗? - DaWNFoRCe
@AlexI 在第一步之后,我在 MyFile.dll 的属性面板中看到了数字签名选项卡。这正常吗?我原本期望该选项卡在最后一步才可见。 - videoguy
1个回答

1
没有办法在签名服务器上执行时间戳,除非将整个文件传输到您的签名服务器。时间戳是直接应用于文件本身的操作,因此文件必须存在于本地。您的远程签名服务之所以有效,是因为只需要签署摘要,而不是完整的二进制文件。但是,正如您指出的那样,您仍然需要使用/di signtool选项在本地摄取已签署的摘要。

您可以创建一个自定义工具,根据您的要求以编程方式对文件进行签名和时间戳。请参阅Microsoft文章,了解如何使用支持时间戳的SignerSignEx2函数。
https://learn.microsoft.com/en-us/windows/win32/appxpkg/how-to-programmatically-sign-a-package?redirectedfrom=MSDN 你可能已经看到这个了,但我还是建议看一下AzureSignTool仓库,它使用未公开的SignerSignEx3函数通过回调执行签名。你可以使用其他自定义签名服务来替换Azure功能。

当我尝试在本地复制这个时,似乎需要一个在第一步创建的p7u文件。你有同样的行为吗?我假设这个文件包含PKCS7证书,然后.signed文件包含Base64签名。最后一步只需要将它们合并吗? - DaWNFoRCe
我不认为需要 .p7u 文件,但我不完全确定你的问题是什么。你是指时间戳作为最后一步吗? - Dan
实际上,摄取步骤是:signtool.exe sign /di .MyFile.dll。如果您从存放MyFile.dll的目录中删除p7u文件,则会从signtool收到错误信息。 - DaWNFoRCe
所以,这个 .p7u 文件有什么作用?为什么它很重要?有人知道吗? - DaWNFoRCe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接