![如何识别 Authenticode 时间戳与符合 RFC 3161 的时间戳?](https://linux22.com/image/670801/%E5%A6%82%E4%BD%95%E8%AF%86%E5%88%AB%20Authenticode%20%E6%97%B6%E9%97%B4%E6%88%B3%E4%B8%8E%E7%AC%A6%E5%90%88%20RFC%203161%20%E7%9A%84%E6%97%B6%E9%97%B4%E6%88%B3%EF%BC%9F.png)
使用 Microsoft 的签名工具,指定时间戳 URL 时有几个不同的选项,/t 和 /tr。
/t 可以指定 Authenticode 时间戳 URL,而 /tr 应该与符合 RFC 3161 的时间戳服务器一起使用。
有没有办法分析文件上的时间戳来确定是否使用了 /t 或 /tr?是否是 Authenticode 或 RFC 3161?
答案1
是的。使用以下语法调用 Microsoft 的 signtool.exe 时,它将打印先前签名的文件上的数字签名摘要,包括用于创建时间戳的标准:
signtool 验证 /all /pa文件名
为了说明这一点,将您自己的一个文件置于Symantec 应用双重签名的程序。这将导致您的文件上出现 2 个数字签名,每个签名都有相应的时间戳。一个时间戳将使用 Authenticode 应用,另一个时间戳将使用 RFC 3161 应用。
请注意,Symantec 的程序建议通过查看文件 RMB 属性的“数字签名”选项卡来验证结果。该选项卡提供时间戳值(日期和时间),但不提供时间戳标准。
完成此过程后,使用 signtool verify 命令查看数字签名摘要,如上所示。时间戳标准将显示在“时间戳”字段中。例如,如果您对名为的文件进行双重签名,您将看到以下内容我的DigitallySigned.dll:
C:\Users\我的用户名>signtool verify /all /pa MyDigitallySigned.dll 文件:MyDigitallySigned.dll 索引==算法==时间戳==== ======================================== 0 sha1 验证码 1 sha256 RFC3161
答案2
实施细节如下:https://msdn.microsoft.com/en-us/library/windows/desktop/bb931395(v=vs.85).aspx
简而言之,签名是标准化的。/t
和之间唯一的不同/tr
应该是用于获取时间戳签名的协议。在这两种情况下,Signtool 都会对签名执行自己的操作:将其作为副署复制到作为身份验证签名的 PKCS#7 消息中。
如果您可以将 CA 证书映射到协议并且它们是不同的,您可能能够通过检查签名推断出所使用的方法,但没有理由这样做。