【问题标题】:Windows MS signed filter driver doesn't load on Win 7 x64 after updating driver to build with VS2019 / WDK 22000更新驱动程序以使用 VS2019 / WDK 22000 构建后,Windows MS 签名的过滤器驱动程序不会在 Win 7 x64 上加载
【发布时间】:2021-09-18 23:53:59
【问题描述】:

我最近接受了一项任务,更新我们的过滤器驱动程序,从使用 Visual Studio 2015 -> 2019 构建。我还迁移到了最新的 SDK + WDK 22000(这是新的 Windows 11 版本)。

除了在 Win 7 x64(带安全启动)盒子上驱动程序不再加载之外,一切似乎都正常工作。它得到了:

Load failed with error: 0x80070241
Windows cannot verify the digital signature for this file. A recent hardware or
software change might have installed a file that is signed incorrectly or damaged,
or that might be malicious software from an unknown source.

我们的驱动程序是/现在由 Microsoft 通过 MS 硬件门户签署的证明,因此它是由我们公司和 Microsoft 联合签署的,每个都有 SHA-2 签名。 Windows 7 不支持开箱即用的 SHA-2 证书,但它以前可以正常工作:

Windows6.1-KB3033929-x64

已安装。不过似乎有些东西发生了变化,即使有最新的更新,Windows 7 x64 机器也无法加载新驱动程序。他们加载 2015 年构建的驱动程序就好了,即使两者上的证书 看起来 相同。新驱动程序可以在 Windows 10 机器上正常加载。

是否有人知道可能导致此组合无法加载的任何其他更改?

【问题讨论】:

  • 将有助于查看二进制文件(加载正常和失败)以进行比较

标签: windows driver wdk driver-signing attestations


【解决方案1】:

几个月前,当我们决定更换证书提供商时,我遇到了类似的问题。我会把我的知识分享给你,希望对你有所帮助。

不久前,Microsoft 使用交叉证书来验证受信任的证书颁发机构 (CA),因此您唯一需要签署驱动程序的就是从受信任的 CA 购买的正确证书。但是recently 验证过程发生了变化,从 Windows 10 20H2 开始,您必须通过 Microsoft 合作伙伴中心签署您的驱动程序,并且所有交叉证书都已弃用。但是,您仍然需要对 Windows 10 之前的所有驱动程序使用交叉签名过程,如果正确的话,实际上交叉签名驱动程序将适用于 Windows 10 20H1

现在回到 Visual Studio。要正确签署驱动程序,您必须在 Properties -> Driver Signing -> General -> Production Certificate 字段中设置生产证书,这会导致 Visual Studio 在构建后使用 signtool 实用程序对驱动程序进行签名完毕。据我推测,Visual Studio 2019 流程不使用交叉证书,看起来像:

signtool sign /v <trusted_certificate> /tr http://timestamp.digicert.com /td sha256 /fd sha256 /a <sys_driver_filepath>

但Visual Studio 2013实际上必须使用交叉证书,它使用的命令是:

signtool sign /v /ac <microsoft_cross_certificate> /tr http://timestamp.digicert.com /a <sys_driver_filepath>

那么什么是交叉证书?它是一种特殊的受信任的 Microsoft 证书,与经过认证的 CA 相关联。可以在此处找到所有可用交叉证书的列表https://docs.microsoft.com/en-us/windows-hardware/drivers/install/cross-certificates-for-kernel-mode-code-signing#cross-certificate-list。要选择正确的,您需要先检查您的公司证书。查看您的证书的证书路径根目录,打开查看属性->详细信息并找到Issuer,这就是您的CA。现在你需要在交叉证书列表中找到exact匹配并下载它。请注意指纹不需要匹配(在related issue 中显示)。毕竟使用正确的signtool 命令来签署您的文件。

P.S.如果您的证书颁发者不在列表中,则意味着您的 CA 不合适,您需要获取/购买另一个证书。

【讨论】:

  • 谢谢。这很有帮助。请问,您最后一次真正购买新证书是什么时候?因为,digicert 告诉我们,由于 Microsoft 已弃用交叉签名,他们将不再向我们出售支持它的证书,其他任何人也不会。我想知道我们现在到底如何支持 Windows 7...
  • 查看此页面:docs.microsoft.com/en-us/windows-hardware/drivers/install/…。该页面似乎表明不再需要交叉签名的驱动程序,但据我所知。除非我交叉签名,否则我的驱动程序不会在 Win 7 上加载。即使它也已通过 MS 签名门户进行了签名。
  • @Benj 你误读了他们所说的。交叉签名不是“不再需要”,它作为一个程序已被弃用。例如,人们不再允许自己签署司机。但要加载驱动程序,其签名的证书链仍必须位于 Microsoft 受信任的根目录中。但现在唯一的方法是将驱动程序发送给 Microsoft(证明或 HLK 签名)。更重要的是,即使您仍然拥有有效的交叉证书,他们也会禁止您使用它。
  • @KonstantinVlasov - 是的,我明白了。问题是 Windows 7 也不再支持证明签名。严格来说,它只是 Windows 10。最后,我在 OSR 人员的帮助下找到了解决方案。我的微过滤器必须是 Windows 10 认证签名,之前根本没有添加任何签名,并且实际上适用于 Windows 7。但 PnP 驱动程序并非如此。见这里:osr.com/blog/2021/04/08/…
  • @Benj 是的,我本人一直在关注有关 OSR 的讨论,并尝试了其中的一些解决方法。尽管它们没有涵盖所有用例,并且几乎不推荐用于生产用途,但当 WHQL 不是一个选项(无论出于何种原因)时,它至少适合个人使用。
猜你喜欢
  • 2012-02-24
  • 1970-01-01
  • 2014-10-21
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
  • 2012-11-22
  • 1970-01-01
相关资源
最近更新 更多