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

How does driver signing work when Windows is offline?

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

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

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

我的问题是这样的; windows 如何知道驱动程序在脱机时由信誉良好的证书颁发机构签名并且无法与所述信誉良好的证书颁发机构核对?

Windows 是否在 Windows 内保存了来自信誉良好的证书颁发机构的 public 密钥集合?难道不能更改此列表以加载驱动程序,就好像它具有信誉良好的证书颁发机构的证书一样吗?

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

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

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

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

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

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