双重签名 .cat 文件有错误“主题中不存在签名”

Posted

技术标签:

【中文标题】双重签名 .cat 文件有错误“主题中不存在签名”【英文标题】:Dual-sign .cat file has error "No signature was present in the subject" 【发布时间】:2015-11-05 10:38:33 【问题描述】:

我正在使用从 Symantec 购买的证书和以下命令行对驱动程序的 windows .sys 和 .cat 文件进行双重签名(sys 和 cat 文件都使用相同的选项进行签名):

signtool.exe sign /v /ph /n "MyCorp" /ac "C:\Signing\VeriSign Class 3 Public Primary Certification Authority - G5.cer" /i "VeriSign Class 3 Code Signing 2010 CA" /t "http://timestamp.verisign.com/scripts/timstamp.dll" "MyDriver.cat"

signtool.exe sign /v /ph /n "MyCorp" /ac "C:\Signing\VeriSign Class 3 Public Primary Certification Authority - G5.cer" /i "Symantec Class 3 SHA256 Code Signing CA" /tr "http://timestamp.geotrust.com/tsa" /as /fd sha256 /td sha256 "MyDriver.cat"

Signtool.exe 退出时报告成功。当我通过右键单击签名文件来查看签名时,选择属性,转到数字签名选项卡,然后我看到两个签名。 sha1 签名似乎很好。当我在 .sys 文件中查看 sha256 证书的详细信息时,一切看起来都很好。但是,当我在 .cat 文件中查看 sha256 证书的详细信息时,我看到以下错误:

驱动程序不会安装在我配置为认为 SHA1 已于 2015 年 1 月 1 日弃用的 Window7 机器上(而不是它们的实际到期日期,即 2016 年 1 月 1 日)。

我在msdn page 上看到了一条注释:

请注意,只有 .sys 文件可以进行双重签名,因为它们是 PE 文件。

这句话是否试图以迂回的方式说 .cat 文件不能被双重签名?

应该如何对 cat 文件进行签名,以便它们可以安装在所有版本的 windows 上?

【问题讨论】:

【参考方案1】:

.cat 文件似乎不能进行双重签名。 我的解决方案是使用 SHA256 证书对 .cat 文件进行签名,但使用 signtool 命令行选项来创建 SHA1 签名。 与驱动程序关联的 .sys 文件我仍然能够进行双重签名。 这似乎适用于我需要的所有场景。

【讨论】:

【参考方案2】:

这只是视觉/外观问题还是您的驱动程序安装失败?

双重签名可能更好、更可靠的替代方案是安装程序,它包含 sha1 和 sha2 签名的二进制文件,根据操作系统版本安装正确的集合。由于二进制文件的主要部分是相同的,压缩后的安装程序大小也不会增加太多。

【讨论】:

【参考方案3】:

cat 文件应使用以下程序进行双重签名:

inf2cat.exe /driver:__Path__ /os:__WindowsVersions__

signtool.exe 签名 /v /ac __RootCert__ /t __TimeStampLink__ /sha1 __Sha1ThumbPrint__ __CatFile__

signtool.exe 签名 /v /ac __RootCert__ /tr __TimeStampLink__ /td sha256 /fd sha256 /as /sha1 __Sha2ThumbPrint__ __CatFile__

使用 windows kit v10.x(或更高版本)中的签名工具来执行此操作。

【讨论】:

我想当我尝试这个时,第二个签名覆盖了第一个。 @scott - /as 附加签名。 @user3161924 你试过用 .cat 文件吗?我以为 .cat 文件格式只支持一个签名。

以上是关于双重签名 .cat 文件有错误“主题中不存在签名”的主要内容,如果未能解决你的问题,请参考以下文章

有一个双重模板化的错误实现

循环语句之双重循环练习

签名介绍

对强命名的 .NET 程序集进行数字签名

文件签名 exe,dll,sys

Inf2Cat应用的参数使用详细介绍