双重签名 .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 文件有错误“主题中不存在签名”的主要内容,如果未能解决你的问题,请参考以下文章