如何识别Authenticode时间戳与符合RFC 3161的时间戳?

在使用Microsoft Signtool签名代码时,在指定时间戳URL / t和/ tr时有几个不同的选项。

/ t可以指定Authenticode时间戳URL,并且/ tr应该与RFC 3161兼容的时间戳服务器一起使用。

有没有办法分析一个文件的时间戳,以确定是否使用/ t或/ tr? 如果是Authenticode或RFC 3161?

是。 微软的signtool.exe将打印一个以前签名的文件的数字签名摘要,包括使用以下语法调用时使用哪个标准创build时间戳:

signtoolvalidation/所有/ pa 文件名

为了说明,请将您自己的文件之一交给赛门铁克申请双重签名的程序 。 这将导致您的文件上有两个数字签名,每个签名都有相应的时间戳。 一个时间戳将使用Authenticode,另一个使用RFC 3161。

请注意,赛门铁克的程序build议通过查看文件的人民币属性的“数字签名”选项卡来validation结果。 该选项卡提供时间戳值(date和时间),但不提供时间戳标准。

完成该过程后,按照上面的build议使用signtool verify命令查看数字签名的摘要。 时间戳标准将显示在“时间戳”字段中。 例如,如果您双重签名名为MyDigitallySigned.dll的文件,您将看到以下内容

 C:\ Users \ myusername> signtool verify / all / pa MyDigitallySigned.dll
文件:MyDigitallySigned.dll
索引== ==algorithm时间戳====
 ========================================
 0 sha1 Authenticode
 1 sha256 RFC3161

实现细节在这里: https : //msdn.microsoft.com/en-us/library/windows/desktop/bb931395(v=vs.85).aspx

总之,签署是标准化的。 /t/tr之间唯一不同的地方应该是用来得到时间戳签名的协议。 Signtool在这两种情况下都用自己的签名做自己的事情:将其作为联署签名复制到PKCS#7消息中,即authenticode签名。

您可以通过检查签名来推断使用的方法,如果您可以将CA证书映射到协议并且它们是不同的,但是应该没有理由这么做。