在Windows 8中,第三方INF驱动文件需要签名吗?

问题描述 投票:0回答:2

我在一家销售 USB 设备并为其提供驱动程序的公司工作。

在Windows 7中,您可以安装和使用USB设备的未签名INF驱动程序文件,只要它们不向内核添加任何代码即可。我们公司使用 Microsoft 提供的通用驱动程序(

usbser.sys
winusb.sys
),因此我们不需要签署我们的驱动程序包。您可以看到此类驱动程序包的示例

根据我们的一位客户的报告和另一个 Stack Overflow 问题Windows 8 的驱动程序签名要求发生了哪些变化?Arduino 论坛,听起来 Windows 8 Consumer Preview 具有更严格的签名要求需要对所有第三方 INF 文件进行签名。人们在尝试安装适用于 Windows 7 的驱动程序时收到的错误消息是:

第三方INF不包含数字签名信息。

微软确认 Windows 8 最终版本中仍需要签名的官方说法是什么? MSDN.com 上的一两句话就足够了,但我找不到任何东西。

我正在考虑购买签名证书,但在支付 200 美元之前,我想确定我长期确实需要它。有可能新的签名要求只是在消费者预览版中,而不是在真实版本中?

windows-8 certificate driver driver-signing
2个回答
20
投票

回答我自己的问题:是的,Windows 8 的最终版本确实需要对所有 INF 文件进行签名,但您不需要将驱动程序提交到 WHQL。我在我的文章实用 Windows 代码和驱动程序签名中写了有关此要求的内容以及更多内容。


10
投票

它不仅需要对 INF 文件进行签名,还要求它们由 WHQL 证书进行签名,而不是用于嵌入签名 .sys 文件等的证书。在 INF 文件上使用我的代码签名证书根本不起作用。 (与未签名相同的问题。)

编辑:

这就是微软希望你这么想的。他们说某些类别的驱动程序必须经过 WHQL 签名,否则它们将无法工作,并且

Authenticode 签名仅适用于那些没有 WHQL 流程的人。

事实证明,您可以对驱动程序包进行 Authenticode 签名,但您必须像现在对内核代码一样小心地对它们进行签名,这意味着为您的

CA 获取正确的交叉证书(来自 内核模式代码的交叉证书)签名,现在有很多,包括 StartCom,我有(2 级,两年 60 美元,但它们不能加时间戳)。提供这个交叉证书(与你的 CA 自签名不同)证书或其中间证书。仅在该 MSDN 页面上可用)通过 /ac 开关发送到 SignTool

然后使用带有

/kp

 开关的 SignTool 验证来查看是否正确地交叉签名了它们。不带任何开关的 SignTool 验证要求 .cat 文件经过 WHQL 签名,而之前看起来没问题的 
/pa
 开关现在太宽松了,并且仅适用于非驱动程序签名(如 EXE 文件、
ClickOnce) 等)。

如果你不想获得自己的内核级签名证书(现在比以前更容易了,坦白说,在它仅限于 VeriSign 的超级昂贵的、GlobalSign 每年 200 美元的证书之前,我想微软也看到了这一点)没有多少人为 x64 系统编写内核级漏洞),您可以制作一个

自签名根 CA,让您的驱动程序安装程序 install 将其放入 LocalMachine 的“受信任的根证书颁发机构”存储中(请参阅 certmgr.exe

),然后安装由其签名的 .cat 文件。当然,由于这不是内核级代码证书,因此您只能使用已经具有其他人的嵌入式内核级代码证书的 .sys 文件(这意味着您只能修改驱动程序包中的 .inf 文件) 。显然,存在一些允许自签名证书签署 .cat 文件的漏洞(如果您创建了自己的 CA,然后用它签署了一个证书,然后用它签署了您的 .cat 文件,它
不会工作就像这个)。

对于为其制作的每个驱动程序 INF 包执行此操作的套件,请参阅 libwdi,以及它们在 cat 文件上的自签名证书如何允许在 Windows 8 上安装。

编辑2:

删除了 CERTUM“开源”开发人员证书的提及,因为它未经 Microsoft 交叉认证(您获得的证书不是 Microsoft 交叉认证的 Certum TRUSTED NETWORK 证书)。

© www.soinside.com 2019 - 2024. All rights reserved.