【问题标题】:How to Code Sign with multiple timestamps - my stamps get overwritten如何使用多个时间戳进行编码签名 - 我的邮票被覆盖
【发布时间】:2019-06-04 08:40:45
【问题描述】:

问题

虽然我的 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

文字图片


基本原理

我拥有的证书来自 Certum 权威机构,名为Standard Code Signing。由于它即将到期,我想确保我的 Windows 可执行文件在我的签名证书到期后不会出现问题。我认为如果一台服务器及时不可用或服务停止,更多的时间戳会更好,例如 Certum 权限会消失。


其他细节

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

  • 通过多台服务器的时间戳;或

  • 引用一些可靠的消息来源表明这是不可能的

【问题讨论】:

  • "由于它即将到期,我想确保我的 Windows 可执行文件在我的签名证书到期后不会出现问题。我认为如果一个服务器及时不可用或更多时间戳会更好服务停止”——我完全明白你的意思。证书的未来到期与现有签名的时间戳有何关系?请注意,TSA 不需要参与未来的时间戳验证:en.wikipedia.org/wiki/…

标签: timestamp code-signing signtool


【解决方案1】:

这个问题看起来与Code Signing with Multiple Timestamp servers 重复。

简短的回答是:不,不能多次添加时间戳。

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

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

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

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

【讨论】:

  • 没错!这不是技术可行性的问题,但很明显,OP 想要的只是没有任何意义。签名不能同时发生在两个时间点,而只能发生一次,这就是最初发明时间戳服务的目的。该问题是XY problem 的典型示例:作者描述了如何他想解决一个问题,而不是他喜欢解决哪个问题。 (好吧,他提到了他的理由,所以它只是 80% XY。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 1970-01-01
  • 2011-05-23
  • 2011-10-08
  • 1970-01-01
  • 2014-01-03
  • 2015-02-16
相关资源
最近更新 更多