【问题标题】:How does driver signing work when Windows is offline?Windows 离线时驱动程序签名如何工作?
【发布时间】:2015-09-05 21:55:09
【问题描述】:

我了解签名的基础知识。您必须拥有来自信誉良好的证书颁发机构的私钥和证书(不一定)。然后,您必须拥有签名者的公钥才能验证其完整性。

我可以在网上看到这个工作;网站会(不一定)从信誉良好的证书颁发机构(例如 Verisign)获得证书,并且 Firefox(例如)可以通过联系该证书颁发机构来检查证书的真实性。

是的,我知道您可以使用自行生成的证书进行签名,但 Firefox 会在发生这种情况时抱怨,Windows 在安装第 3 方驱动程序时也会抱怨。

我的问题是这样的;当驱动程序处于脱机状态并且无法与所述信誉良好的证书颁发机构核对时,Windows 如何知道驱动程序是由信誉良好的证书颁发机构签署的?

Windows 是否保留了来自 Windows 内信誉良好的证书颁发机构的公钥集合?难道不能改变这个列表来加载一个驱动程序,就好像它有一个有信誉的证书颁发机构的证书一样?

驱动程序签名如何离线工作?

【问题讨论】:

    标签: windows cryptography driver signing certificate-authority


    【解决方案1】:

    是的,Windows 保留一组受信任的根证书。某些软件,例如 IE 和 Chrome,使用该集合;某些软件(例如 Firefox)附带了自己的列表。这就是证书验证的工作原理;没有人通过互联网从 CA 获得根证书,因为您怎么知道您真的在与 CA 交谈?

    您可以通过证书插件使用 MMC 查看 Windows 根证书存储。请注意,除了全局(“计算机帐户”)存储之外,每个用户帐户都有自己的证书存储。

    但是,Windows 使用该受信任证书列表进行驱动程序签名。相反,Windows 内核有一个内置的根证书列表。驱动程序的证书验证基于该内置列表,如果我理解正确,该列表完全由属于 Microsoft 的根证书组成。

    When a driver is signed by a third-party certificate authority, 使用了cross-signed certificate

    更复杂的是,在大多数情况下,设备驱动程序以两种不同的方式进行加密验证;在安装过程中一次,然后在驱动程序代码加载到内核中时再次。安装过程中的验证使用主根证书列表,管理员可以根据具体情况覆盖;加载驱动程序代码时的验证使用内核的根证书列表,不能根据具体情况进行覆盖。

    【讨论】:

    • 我了解到您可以使用 MMC 查看 Windows 的根证书集合,但是根证书存储在 Windows 的什么位置?另外,写入证书存储需要什么样的权限?显然是管理员或更高,但是否需要管理员或系统权限才能读取和更改证书存储?
    • 物理文件位置无关紧要 - 无论如何它都可能发生变化。证书工具允许您添加和删除证书,或者您可以使用 .NET System.Security.Cryptography.X509Certificates API 在软件中执行此操作。要操作系统的根证书存储,您需要管理员权限。 (但是请记住,这不会让您为驱动程序签名添加新的根证书,因为驱动程序验证机制不使用根证书存储。)
    • 有趣。如果不使用根证书存储,驱动验证机制使用什么机制?
    • 我已经在答案的第三和第四段中介绍了这一点。内核中内置了少量根证书(可能只有一个),属于 Microsoft。第三方驱动程序通常使用由第三方证书颁发机构签名的证书,因此他们还必须附带交叉签名证书。交叉签名证书由 Microsoft 提供给 CA,并向内核证明 Microsoft 批准 CA 根证书用于驱动程序签名。
    • @Sam 你想完成什么?如果您需要将自制驱动程序注入您自己的机器以进行测试,则无需由 Microsoft 对其进行签名(然后在每次重新编译时重新签名),- 使用 TESTSIGNING Windows 引导加载程序中的选项。
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多