代码之家  ›  专栏  ›  技术社区  ›  Vlastimil Burián

使用多个时间戳服务器的代码签名-时间戳被覆盖,为什么?

  •  0
  • Vlastimil Burián  · 技术社区  · 5 年前

    问题

    尽管我在详细的SignTool上没有错误( manual )我的windows可执行文件上的命令,时间戳会被覆盖,我希望有多个时间戳,这可能吗?

    • 如果它 有可能,那怎么办?
    • 如果它 不是 可能,而且我只需要使用一个单一的时间戳,那么从长远来看,您建议使用哪一个服务器( 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权限会消失。


    附加细节

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

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

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

    0 回复  |  直到 5 年前
        1
  •  5
  •   Grzegorz Smulko    5 年前

    这个问题看起来像是 Code Signing with Multiple Timestamp servers .

    简而言之,答案是:不,时间戳不可能不止一次。

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

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

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

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