Windows“隐藏”一些受信任的根 CA 证书有多大问题?

信息安全 证书 视窗 证书颁发机构
2021-09-08 15:15:16

根据此页面上的信息,Windows 实际上信任的根 CA 证书比用户启动certmgr.msc和导航到时显示的证书要多得多Trusted Root Certification Authorities > Certificates

根据文章,实际受信任的根 CA 证书不仅是向用户显示的证书,certmgr.msc而且是本地计算机上由 Windows 维护的证书信任列表中的所有证书。

在我的 Windows 7 机器上,“CTLInfo.exe”工具(由该文章的作者提供)列出了 343 个根 CA 证书的输出。这绝对比我目前在我的用户帐户下的受信任的根证书颁发机构存储中拥有的 36 个要多得多。

其中一些如下所示。

CTLInfo.exe 的输出

进一步研究后,我按照以下步骤(取自上述文章中留下的评论)从 Windows 更新服务器生成带有受信任的根 CA 证书的 SST(Microsoft 序列化证书存储)文件:

  1. 启动 Windows 命令提示符并浏览到要在其中生成 SST 文件的某个文件夹。
  2. 执行: certutil -generateSSTFromWU roots.sst
  3. 双击生成的roots.sst文件应该以certmgr.msc. 或者,如果 .sst 扩展名配置为由您机器上的其他软件打开,您可以在同一命令提示符下执行以下命令:start explorer.exe roots.sst

我通过上述步骤获得的 SST 文件也有 343 个根 CA 证书,其中一些如下所示。

微软提供的一些根 CA

是否使用作者工具查看证书,或者是否使用第二种方法将它们生成到单独的列表中可能并不重要(但是,后一种选项为使用证书提供了更大的灵活性)。

更新 1:其中一个答案说,在本地计算机帐户下应该可以看到大量 300 左右的缺失证书。

所以我现在使用这些步骤来验证我机器上本地计算机帐户下的证书数量:

  1. 单击开始并输入mmc运行提示。这将带来一个空的Microsoft Management Console.
  2. 选择Add/Remove Snap-InFile菜单。
  3. 在 中Available snap-ins,选择Certificates并单击Add
  4. 选择Computer Account
  5. 选择Local Computer
  6. 单击Finish

查看结果,本地计算机下显示的受信任根 CA 证书的数量是 37。今天这恰好与我的用户帐户下列出的数量完全相同,因为看起来 Windows 添加了一个受信任的根 CA 证书,因为我最初发布了这个问题。

事实上,本地计算机下列出的受信任的根 CA 证书似乎与我的用户帐户下列出的相同。但即使没有,这两组的总和也只有74人;343 个证书中的大多数仍然不可见。

最重要的是,尽管 343 个证书中的绝大多数也没有通过这种方式显示。

更新结束 1

无论如何,看看微软信任的 343 根 CA 证书,似乎它们中的大多数甚至不适用于我在美国。

或者,如果我需要与突尼斯或中国的某些服务器建立加密连接,它们可能适用。另一方面,如果我确实使用 IE 创建了到某些此类服务器的加密连接,浏览器可能不会抱怨太多,因为所需的根 CA 已经在我机器上的 CTL 中。

更新 2: 我认为将 SST 文件中的所有受信任的 CA 与本地计算机或当前用户下可见的证书分开会使明确禁止它们中的任何一个变得困难。例如,似乎 Google 计划停止接受的根 CA(在此处提到)仍然由 Microsoft 在上述步骤生成的 SST 中提供。

但是我注意到,仅在打开的 SST 文件中查看根 CA 证书就会立即将它们添加到Trusted Root Certification Authoritiescertmgr 中可见的组中。所以刷新certmgr后,新的根CA就可以拖到Untrusted Certificates组里了。

然而,这必须为每个查看的证书单独完成。

更新结束 2

所以我想问的问题是:

  1. 如果 Windows 可能愿意在将来使用它们(取决于我的 Web 浏览需要),为什么 Windows 不显示所有 343 根 CA 证书?
  2. Windows 不显示所有受信任的根 CA 证书这一事实是否存在任何潜在的安全问题certmgr.msc
2个回答
  1. 如果 Windows 可能愿意在将来使用它们(取决于我的 Web 浏览需要),为什么 Windows 不显示所有 343 根 CA 证书?

这可能部分是 Windows 用于在 certmgr 中对证书进行分组和显示的逻辑证书存储和物理证书存储的副作用。如果您右键单击 certmgr 中的一个节点并选择查看 > 选项...,您可以切换到查看按“证书用途”分组的证书,而不是默认的“逻辑证书存储”。这应该会显示更多的证书,但更难看出哪些证书不受信任。

  1. Windows 不通过 certmgr.exe 显示所有受信任的根 CA 证书这一事实是否存在任何潜在的安全问题?

您必须付出更多努力来确保您不信任的证书列在Untrusted Certificates. 例如,假设您阅读了有关 e-Guven 证书的 Mozilla 博客,并希望确保它在 Windows 中设置为不受信任。在这种情况下,您首先必须让它显示在您的 certmgr(或本地计算机证书)中,然后将其移动到不受信任的组中。

2016-01-06 更新:毕竟它不是 CertMgmt.msc 和 CertLM.msc 的总和。即使您已完全修补也不行。

在给出这个答案时,我写了CERTLM [...] 这就是应该可以看到 300 多个内置根的地方。

事实证明这是完全错误的。对不起。

我有点假设 Windows 根证书机制的“上线”部分只有在很长一段时间内没有进行定期更新时才会真正发挥作用。

嗯,不。

在我打过补丁的 Win10 机器上就是这样。本地只有 82 个证书。但是340-东西在线。嗯。

旧的和错误的原始帖子保留在下面。


你错过了 CERTLM

Windows 使用来自的根的总和

  • CERMGR,当前用户的证书和
  • CERTLM的大号OCAL中号achine的证书。这就是应该可以看到 300 多岁的内置根的地方。

更新 1

  1. 如果 Windows 可能愿意在将来使用它们(取决于我的 Web 浏览需要),为什么 Windows 不显示所有 343 根 CA 证书?

我只能猜测。我猜是奇怪的设计决定。

  1. Windows 不显示所有受信任的根 CA 证书这一事实是否存在任何潜在的安全问题certmgr.exe

是的。它不必要地复杂,这对安全性没有好处。