驱动程序签名:如何让 MakeCert 测试证书在 x64 上工作

Driver signing: how to get MakeCert test certificates to work on x64

我正在尝试加载已使用 MakeCert.exe 生成的证书签名的内核驱动程序。

我遵循了 Windows 驱动程序套件文档中给出的说明:

  1. Sign the driver with MakeCert.exe
  2. Verify the signature with SignTool verify /v /pa DriverFileName.sys
  3. Installing the cert into the test computer's Trusted Root Certification Authorities store and Trusted Publishers store, using CertMgr.exe

当我按照 WDK Microsoft Docs 中的描述使用 SignTool verify /v /pa DriverFileName.sys 验证签名时,SignTool 报告签名正常。我已经在开发计算机和应该加载驱动程序的测试机器上完成了此操作。

但是,驱动程序实际上并没有加载。 Windows CodeIntegrity 日志显示 3004: Windows is unable to verify the image integrity of the file \Device\HarddiskVolume3\path\DriverFileName.sys because file hash could not be found on the system. 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.

我看了this similar question。当我 运行 SignTool verify /v /kp DriverFileName.sys 时,我得到了与该问题相同的结果。它说:SignTool Error: Signing Cert does not chain to a Microsoft Root Cert.

链接问题的解决涉及使用真实的非测试证书,并更改签名设置以使其正确链接到 Microsoft 根证书。我还没到那个阶段;我只想让我的测试基础架构正常工作 "properly".

我有兴趣让内核加载我的驱动程序,并使用我在测试机器上手动安装的证书验证签名。我知道我可以使用 bcdedit -set testsigning yes 来完全禁用签名验证,但这似乎有点矫枉过正 - 它会允许 any 签名的驱动程序到 运行,即使它不是'没有用我安装在机器上的测试证书签名。是否可以关闭 "testsigning" 模式(因此驱动程序签名实际上仍然是 validated 针对已安装的证书),但仍然使用我内部自生成的 MakeCert.exe 测试证书?

看起来答案是否定的,这不可能。

Can I install self-signed drivers on 64-bit Windows without test mode if the self-signed CA root certificate is imported to the machine store?

WDK 文档似乎具有误导性。在 x64 测试机器上安装由 MakeCert.exe 生成的证书似乎完全没有意义,因为内核从不关注它。

如果启用了 TESTSIGNING 模式,则不会验证签名,因此不需要安装证书。

如果 TESTSIGNING 模式关闭,自签名证书不会被内核信任的任何东西交叉签名,因此它被认为是无效的,所以安装证书没有帮助。

我很乐意接受更正。