尽管我在Windows可执行文件上的详细SignTool(manual)命令上没有出现任何错误,但是时间戳被覆盖了,我希望有多个时间戳吗?
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
}
我从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授权将消失。
我理想的解决方案应该解决上述问题:
通过在多个服务器上加盖时间戳;或
引用一些可靠的消息来源
答案 0 :(得分:5)
这个问题看起来像是Code Signing with Multiple Timestamp servers的副本。
最简单的答案是:不可以,时间戳记不能超过一次。
但是可以使用不同的算法进行签名(双重签名),但这意味着将生成两个单独的签名,每个签名都有自己的时间戳。
多个时间戳实际上意味着什么?时间戳记会告诉消费者资产签署的时间。签名的单个动作不可能在两个不同的时刻完成。除非应用了两个不同的签名,否则每个签名都有自己的时间戳(双签名)。
此外,让我们想象一下,可以将两个时间戳应用于同一签名。假设文件在2019年1月1日签名,第一个时间戳在2/1/2019应用,第二个时间戳在3/3/2020。对验证签名的客户意味着什么?这真的没有多大意义,对吗?如果证书仍然有效,则只有后者的时间戳才是真正重要的-这就是SignTool覆盖先前时间戳的原因。
顺便说一句,通常有很多关于时间戳的文章,没有一篇提到为证书分配多个时间戳,例如: