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

Ale*_*x I 6 code-signing digital-signature trusted-timestamp signtool

我们正在努力使用signtool.exe 摘要选项来优化数字签名过程。到目前为止,工作流程如下所示:

  1. 在客户端上创建摘要:signtool.exe sign /f cert /fd sha256 /dg 。我的文件.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

有没有办法在签名服务器上执行时间戳?

Dan*_*Dan 1

有没有办法在签名服务器上执行时间戳?

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

可以做的是创建一个自定义工具,根据您的要求以编程方式对文件进行签名和时间戳。请参阅这篇 Microsoft 文章,了解如何使用SignerSignEx2支持时间戳的函数。
https://learn.microsoft.com/en-us/windows/win32/appxpkg/how-to-programmatically-sign-a-package?redirectedfrom=MSDN

您可能已经看到了这一点,但我还会查看AzureSignTool存储库,它使用未记录的SignerSignEx3函数通过回调执行签名。您可以合理地通过调用其他一些自定义签名服务来替换 Azure 功能。