x509商店位置与商店

本文关键字:位置 x509 | 更新日期: 2023-09-27 18:04:03

我使用c# DotNet中的X509Store来遍历证书存储区。但是,我不清楚证书位置和证书存储之间的区别是什么。例如,位置是LocalUser和LocalMachine。商店的例子有My (Personal)和Root。LocalMachine上的个人商店与LocalUser上的个人商店有什么区别?在LocalMachine上拥有个人商店意味着什么?

x509商店位置与商店

有几个特定的store (c#名称用粗体,UI显示名称用括号斜体):

  • My (Personal):当搜索叶子/终端实体证书时,通常会搜索此存储。这通常是唯一具有带有关联私钥的证书的存储区。
    • 如果您浏览到使用客户端认证证书的网站,IE将从我的商店中选择候选证书。(Forward reference:此位置为CurrentUser)
    • 当从GUI配置IIS时,它将显示来自我的商店的证书。(Forward reference:此位置为LocalMachine)
  • (受信任的根证书颁发机构):在执行链信任决策时,例如在TLS中,如果链的另一端在此存储中表示,则原始证书是受信任的。
    • 除了在这个存储中显式地显示证书之外,它还通过AuthRoot公开了一个虚拟视图。
  • AuthRoot (第三方根证书颁发机构):当注册一个额外的可信根时,您"应该"在第三方商店中进行,因为…原因吗?虽然LocalMachine似乎工作得很好,但CurrentUser似乎主要是为了展示。
  • CertificateAuthority (中间证书颁发机构,对底层系统称为"CA"):这是已知中间证书的存储库。当进行链构建时,系统将在这里查找父节点,然后在根节点,然后可能在互联网上查找。如果链是可信的,那么链中间的证书可能会缓存在这里以供将来查找。
  • Disallowed (不受信任的证书):如果在此存储中找到证书链的一部分,则认为该链不可信。
  • AddressBook (Other People):您所知道的证书的集合。是的,关于那个细节。当试图匹配对等证书时,它会被一些程序/库搜索。例如,SignedXml中的按发行者和序列号查找通知。

还有一些标准的,你可以在TechNet上读到。您还可以使用X509Store(string, StoreLocation)过载创建自己的证书存储。(它有时对管理应用程序很有用,但是当您在自定义存储中有私钥时,证书管理器UI会有点混乱;它只在My store中期望它们)。

这就是StoreName。StoreLocation也许更适合被理解为"商店所有者"。标准用户可以决定信任某个私有CA颁发的证书,这样他们就可以将其添加到根存储库中。因为它是他们的存储,所以它不会影响系统上的任何其他用户。该系统本身也拥有商店。例如,计算机的TLS证书确实属于"计算机",并且可能涉及多个管理员来管理它。因为在你朋友的东西中搜索是非常不寻常的,所以StoreLocation归结为"我,作为一个用户"(CurrentUser)或"这台计算机"(LocalMachine),用于使用哪个商店。

现在事情变得有点模糊了:在Windows上,几乎每个CurrentUser store (My store是个明显的例外)都向LocalMachine等价的store公开一个视图。因此,当您枚举CurrentUser'Root中的证书时,您将获得显式添加到CurrentUser'Root的证书以及显式添加到LocalMachine'Root的证书。这可能会引起混淆,因为在枚举时可以看到一个证书,调用Remove并将其作为参数,并且在再次枚举时它仍然存在。

根据我的经验,大多数与证书商店的交互都是针对my商店的。在这一点上,决策树归结为这样的东西:

  • 我是一个有专用用户帐户的服务吗?
    • new X509Store(StoreName.My, StoreLocation.CurrentUser)
  • 我的服务没有是一个专用的用户帐户吗?
    • new X509Store(StoreName.My, StoreLocation.LocalMachine)
  • 其他
    • new X509Store(StoreName.My, StoreLocation.CurrentUser)

但这是一个很大的概括

LocalMachine的个人存储库包含机器证书。存在于此类存储中的证书的一个示例是IIS用来保护HTTP通信的SSL证书。机器上只有一个这样的存储器。

LocalUser的个人存储库包含用户证书。此类证书的一个示例是用于签署电子邮件消息的S/MIME证书。每个用户都有他/她自己的这种类型的存储