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

标签 windows cryptography driver signing certificate-authority

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

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

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

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

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

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

最佳答案

是的,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已使用。

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

关于windows - Windows 离线时驱动程序签名如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30946216/

相关文章:

html - 获得 SSL,现在所有请求的文件都被阻止(混合内容)

java - 如何获取windows系统文件夹的路径?

c# - RandomNumberGenerator 与 RNGCryptoServiceProvider

Java 和 .NET 互操作 (RSA) 签名

android - 如何在 gui 中启动 androidx86?

windows - 有谁知道从哪里可以获得旧的 WDM 版本的 toastr 驱动程序示例?

windows - 在 Windows 中获取文件的编码

windows - 在Labview 2012、Windows 7操作系统中,如何验证用户写权限?

仅从密封 JAR 加载的 Java 插件框架

c - 虚拟音频驱动程序(麦克风)