windows - 我可以自签名用户模式 USB 驱动程序,还是需要通过 Microsoft 的硬件计划?
问题描述
Microsoft 已弃用对内核模式驱动程序的交叉签名根证书的支持:https ://knowledge.digicert.com/alerts/Kernel-Mode.html
我偶尔会发布带有 USB 驱动程序的软件(作为一对.inf
和.cat
文件)。到目前为止,我一直在使用 signtool 对它们进行签名,使用:
signtool.exe sign /a /ac $ROOT_CA_CERTIFICATE /tr $TIMESTAMP_SERVICE_URL /td SHA256 $MY_CAT_FILE
并通过以下方式验证:
signtool.exe verify /v /kp $MY_SIGNED_CAT_FILE
根据最近的弃用,这不再有效(详情如下)。显而易见的替代方案似乎是将我的驱动程序视为内核模式,并通过 Microsoft 的完整资格路线——这在几个方面既麻烦又令人望而却步。
鉴于它不需要内核模式,是否有更简单的方法来对我的驱动程序进行自签名?
(我不精通签名工具和代码签名,所以如果我遗漏了一些明显的东西,请不要犹豫告诉我!)
我收到的签名/验证失败的详细信息:
如果我继续使用 签名
/ac $ROOT_CA_CERTIFICATE
,我会收到以下错误,这似乎是由于交叉证书过期:
Signtool Error: The provided cross certificate would not be present in the certificate chain.
如果我忽略它,我可以成功签名,但验证
/kp
失败:
SignTool Error: Signing Cert does not chain to a Microsoft Root Cert.
而使用/kp
参数,我会失败:
SignTool Error: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.
解决方案
是的,尽管微软进行了更改,您仍可以签署您的用户模式驱动程序。
如果验证失败,则可能是签名使用了代码签名证书,并且由于SignTool 默认使用 Windows 驱动程序验证策略,您希望避免它并使用Default Authentication Verification Policy
来验证您的文件。
因此,在您的verify
命令中添加/pa
选项以告诉它使用Default Authentication Verification Policy
而不是 ,这Windows Driver Verification Policy
意味着它将查看您的证书存储而不是 Microsoft 信任驱动程序的有限 CA 集。
signtool.exe verify /v /pa $MY_SIGNED_CAT_FILE
应该给你一个成功,例如:
Successfully verified: .\Sources\Driver\usbcom.cat
Number of files successfully Verified: 1
Number of warnings: 0
Number of errors: 0
推荐阅读
- python - 如何在dask.dataframe的多列中分解dict(或dict列表)对象
- vue.js - 我如何访问数组的键和数据并显示它?
- c# - 如何根据所有可变参数进行搜索
- rx-java - 在 onDispose 期间对 RxJava 链中的对象执行操作
- c# - Azure Functions 传出 HTTP 调用不起作用
- java - Spring - 如何将字符串值注入构造函数?
- android - android无法在recyclerView中获取子视图
- node.js - Nodejs未处理的承诺拒绝警告类型错误无法读取属性错误处理?
- python - 存储变量并将其用作 bash 脚本的提示输入
- jmeter - Jmeter在自身受压时不会扩展变量