如何使用多个时间戳对符号进行编码-我的邮票被覆盖

时间:2019-06-04 08:40:45

标签: timestamp code-signing signtool

问题

尽管我在Windows可执行文件上的详细SignTool(manual)命令上没有出现任何错误,但是时间戳被覆盖了,我希望有多个时间戳吗?

  • 如果有可能 ,怎么办?
  • 如果不可能 ,并且我仅需使用1个单个时间戳,那么从长远来看,您建议使用哪台服务器? (DigiCert现在浮现在我的脑海。)

这就是我尝试过的

PowerShell函数

function sign32exe([string]$arg)
{
    & 'C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe' sign /fd sha256 /a $arg
    Start-Sleep -Seconds 5
    & 'C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe' timestamp /tr http://timestamp.globalsign.com/?signature=sha2 /td sha256 /v $arg
    Start-Sleep -Seconds 5
    & 'C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe' timestamp /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /td sha256 /v $arg
    Start-Sleep -Seconds 5
    & 'C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe' timestamp /tr http://time.certum.pl /td sha256 /v $arg
}

PowerShell输出

我从SignTool得到了肯定的输出,但是每次调用都会覆盖时间戳(为了更好的可读性而对其进行了重组):

签名过程进行顺利:

Done Adding Additional Store
Successfully signed: .\my.exe

紧随其后的是时间戳记,每个时间戳记都没有问题:

Successfully timestamped: .\my.exe
Number of files successfully timestamped: 1
Number of errors: 0

Successfully timestamped: .\my.exe
Number of files successfully timestamped: 1
Number of errors: 0

Successfully timestamped: .\my.exe
Number of files successfully timestamped: 1
Number of errors: 0

文字图片

only the last timestamp present


理性

我拥有的证书来自Certum当局,称为Standard Code Signing。由于它即将过期,因此我想确保我的Windows可执行文件在我的签名证书到期后不会遇到麻烦。我认为,如果一台服务器及时不可用或服务停止,则使用更多时间戳会更好,例如,举例来说,Certum授权将消失。


其他详细信息

我理想的解决方案应该解决上述问题:

  • 通过在多个服务器上加盖时间戳;或

  • 引用一些可靠的消息来源

1 个答案:

答案 0 :(得分:5)

这个问题看起来像是Code Signing with Multiple Timestamp servers的副本。

最简单的答案是:不可以,时间戳记不能超过一次。

但是可以使用不同的算法进行签名(双重签名),但这意味着将生成两个单独的签名,每个签名都有自己的时间戳。

多个时间戳实际上意味着什么?时间戳记会告诉消费者资产签署的时间。签名的单个动作不可能在两个不同的时刻完成。除非应用了两个不同的签名,否则每个签名都有自己的时间戳(双签名)。

此外,让我们想象一下,可以将两个时间戳应用于同一签名。假设文件在2019年1月1日签名,第一个时间戳在2/1/2019应用,第二个时间戳在3/3/2020。对验证签名的客户意味着什么?这真的没有多大意义,对吗?如果证书仍然有效,则只有后者的时间戳才是真正重要的-这就是SignTool覆盖先前时间戳的原因。

顺便说一句,通常有很多关于时间戳的文章,没有一篇提到为证书分配多个时间戳,例如: