【问题标题】:In Windows 8, will third-party INF driver files require a signature?在 Windows 8 中,第三方 INF 驱动程序文件是否需要签名?
【发布时间】:2012-06-01 09:30:24
【问题描述】:

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

在 Windows 7 中,您可以为 USB 设备安装和使用未签名的 INF 驱动程序文件,只要它们不向内核添加任何代码即可。我们公司使用微软提供的通用驱动程序(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 不包含数字签名信息。

Microsoft 的官方声明是什么确认在 Windows 8 的最终版本中仍需要签名? MSDN.com 上的一两句话就足够了,但我可以'什么都找不到。

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

【问题讨论】:

  • 获取消费者预览版很简单。所以你可以自己去了解。很难相信你没有。此外,你卖东西但不准备为签名支付 200 美元?!这占贵公司年度利润的一小部分?
  • 获得消费者预览版并不能真正帮助做出这个决定。理想情况下,我希望能及时获得 Windows 8 的正式版。是的,我很节俭。
  • 在问了这个问题大约 7 个月后,我写了一篇大文章,解释了我所学到的关于这个主题的一切:davidegrayson.com/signing 简而言之,Windows 8 确实要求你签署你的 INF 文件,但它不需要必须是 WHQL 签名;它只需要有一个信任链,该信任链可以追溯到受信任的根证书颁发机构列表中的证书。

标签: certificate windows-8 drivers driver-signing


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    编辑:

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

    事实证明,您可以对驱动程序包进行 Authenticode 签名,但您必须像现在对内核代码一样小心并对其进行签名,这意味着为您的 CA 获取正确的交叉证书(来自 Cross-Certificates for Kernel Mode Code Signing,现在有很多,包括我有的 StartCom(2 类,两年 60 美元,但不能加时间戳)。提供这个交叉证书(与您的 CA 的自签名不同)证书,或者他们的中间证书。它只在那个 MSDN 页面上可用)通过/ac 开关发送给SignTool

    然后使用带有/kp 开关的SignTool 验证,查看您是否正确交叉签名。不带任何开关的 SignTool 验证要求 .cat 文件是 WHQL 签名的,而之前似乎可以的 /pa 开关现在过于宽松,仅适用于非驱动程序签名(如 EXE 文件,@987654326 @等)。

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

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

    EDIT2:

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

    【讨论】:

    • 我很确定你错了。我从 Go Daddy 获得了一个正常的证书,它在我的 Windows 8 预览版中的 INF 文件上正常工作。我不必向微软提交任何东西。如果您需要帮助,请写一个 StackOverflow 问题并给我更多详细信息。有关您应该提供的详细信息类型的想法,请参阅stackoverflow.com/questions/12291461/… 请在此处发表评论或其他内容,以便我知道您何时写下您的问题。
    • 我已经用大约 3 天的试错信息更新了我的答案,并且我已经成功地获得了一个自签名证书签名的 .cat 文件和我自己的验证码签名的 .cat 文件继续(在 win8 和更早的 Windows 版本上)
    • 这是/ac,而不是'/ca'。这是/pa 不是/pe。此外,我已经能够成功签署仅由 INF 和 CAT 文件组成的简单驱动程序包,而无需使用交叉证书;重要的是您的信任链可以追溯到受信任的根证书存储中的内容。我引用个人经验和msdn.microsoft.com/en-us/library/windows/hardware/gg487332.aspx 作为我的来源。此外,对于验证驱动程序包,我认为 /pa 是正确的选择,因为他们在 kmcs_walkthrough.doc 中就是这样做的。
    • 是的……但这仅在您没有任何 .sys 文件时才有效。一旦你也需要签署这些,你必须包括交叉证书。而且你不能只是不签署那些(我尝试过,使用手动 .cdf 文件),因为整个驱动程序包必须在 .cat 文件中,而不仅仅是 inf (即使 .sys 文件具有嵌入式签名)跨度>
    • 是的,它们可以加时间戳!请与signtool verify /v ... 联系。如果您使用/tr "http://www.startssl.com/timestamp" 时间戳,则可以正常工作。此外,即使 StartCom 没有提供时间服务器,您也可以随时使用另一个,例如/t http://timestamp.verisign.com/scripts/timstamp.dll
    猜你喜欢
    • 2011-12-26
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 2021-03-22
    • 2012-10-20
    相关资源
    最近更新 更多