在Windows 8中,第三方INF驱动程序文件是否需要签名?

时间:2012-05-25 19:46:28

标签: certificate windows-8 drivers driver-signing

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

在Windows 7中,您可以为USB设备安装和使用未签名的INF驱动程序文件,只要它们不向内核添加任何代码即可。我们公司使用Microsoft提供的通用驱动程序(usbser.syswinusb.sys),因此我们永远不需要签署我们的驱动程序包。

根据我们客户的报告以及其他Stack Overflow问题 What changed in the driver signature requirements for Windows 8? the Arduino forum,听起来Windows 8 Consumer Preview的签名要求更为严格要求所有第三方INF文件都签名。人们在尝试安装适用于Windows 7的驱动程序时收到的错误消息是:

  

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

微软的官方消息是什么,确认在Windows 8的最终版本中仍然需要签名?来自MSDN.com的一两句就足够了,但我可以'找不到任何东西。

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

2 个答案:

答案 0 :(得分:20)

回答我自己的问题:是的,Windows 8的最终版本确实需要对所有INF文件进行签名,但您无需将驱动程序提交给WHQL。我在文章Practical Windows Code and Driver Signing中撰写了关于此要求的更多内容。

答案 1 :(得分:9)

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

编辑:

微软希望你这么想。他们说某些类别的驱动程序必须是WHQL签名的,否则它们将无法工作,并且Authenticode签名仅适用于那些没有WHQL进程的人。

事实证明你是CAN Authenticode签名驱动程序包,除非你必须小心并签署它们,就像现在的内核代码一样,这意味着为CA获取正确的交叉证书(来自 {{ 3}} ,现在有很多,包括StartCom,我有(2级,两年60美元,但不能加时间戳)。提供这个交叉证书(与你的不一样) CA的自签名证书或其中间证书。仅在该MSDN页面上通过/ac开关提供给Cross-Certificates for Kernel Mode Code Signing

然后使用SignTool验证/kp开关,查看您是否正确签名。没有任何开关的SignTool验证要求.cat文件是WHQL签名的,而/pa开关,之前似乎没问题,现在太宽松了,只适用于非驱动程序签名(如EXE文件, SignTool等。)。

如果您不想获得自己的内核级签名证书(现在比以前更容易,坦率地说,在它仅限于VeriSign的超级昂贵的,以及GlobalSign每年200美元的签名证书之前,我想微软看到没有多少人为x64系统编写内核级漏洞,您可以创建 自签名根CA ,让您的驱动程序安装程序 安装 将它放入LocalMachine的“受信任的根证书颁发机构”商店(请参阅certmgr.exe),然后安装由其签名的.cat文件。当然,由于这不是内核级代码证书,您必须只使用已经拥有其他人嵌入式内核级代码证书的.sys文件(这意味着,您只能修改驱动程序包中的.inf文件) 。显然,有一些漏洞允许自签名证书签署.cat文件(如果您创建了自己的CA,然后用它签署了证书,然后使用它签署了.cat文件, 将不会像这样工作 。)

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

EDIT2:

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