2

我最近接受了一项任务,从使用 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.

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

Windows6.1-KB3033929-x64

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

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

4

1 回答 1

1

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

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

现在回到 Visual Studio。要正确签署驱动程序,您必须将生产证书设置到字段Properties -> Driver Signing -> General -> Production Certificate,这会导致 Visual Studiosigntool在构建完成后使用实用程序对驱动程序进行签名。我认为,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-证书列表。要选择正确的,您需要先检查您的公司证书。查看您的证书的证书路径的根目录,打开View Properties -> Details并找到Issuer,这是您的 CA。现在您需要在交叉证书列表中找到完全匹配并下载它。请注意指纹不需要匹配(在相关问题中显示)。毕竟使用适当的 signtool 命令来签署你的文件。

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

于 2021-09-02T08:11:12.643 回答