X509商店位置与商店?

时间:2016-08-26 12:25:37

标签: c# .net windows certificate x509certificate

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

2 个答案:

答案 0 :(得分:3)

有一些专门的商店(C#名称以粗体显示,UI显示名称以括号斜体显示):

  • 我的个人):在搜索leaf / end-entity证书时,此商店通常是搜索到的内容。这通常是唯一具有相关私钥的证书的商店。
    • 如果您使用客户端身份验证证书浏览到某个站点,IE将从“我的商店”中选择候选证书。 (前向参考:此位置是CurrentUser)
    • 从GUI配置IIS时,它将显示“我的商店”中的证书。 (前向参考:这个位置是LocalMachine)
  • 受信任的根证书颁发机构):在执行链式信任决策时,例如在TLS中,如果链的另一端在此商店中表示然后原始证书是可信的。
    • 除了在此商店中明确显示证书外,它还通过AuthRoot公开虚拟视图。
  • AuthRoot 第三方根证书颁发机构):注册其他受信任的根时,您应该""出于这个原因,在第三方商店做到了吗?虽然LocalMachine似乎工作正常,但CurrentUser只有seems to mostly be for show
  • CertificateAuthority 中级证书颁发机构,称为" CA"到底层系统):这是已知中间证书的存储库。在进行链构建时,系统将在此处查找父项,然后在Root中查找,然后可能在Internet上查找。如果链是值得信任的,那么链中间的证书可以缓存在这里以供将来查找。
  • 不允许不受信任的证书):如果在此商店中找到证书链的一部分,则该链被视为不值得信任。
  • AddressBook 其他人):您了解的证书集合。是的,关于那个具体的。尝试匹配对等证书时,某些程序/库会搜索它。例如,SignedXml中的find-by-issuer-and-serial-number通知。

还有一些标准的,你可以read about them at TechNet。您还可以使用X509Store(string, StoreLocation)重载创建自己的证书库。 (它有时对管理应用程序很有用,但是当您在自定义商店中拥有私钥时,证书管理器UI会有点混淆;它只在My store中预期它们。)

这就是StoreName。 StoreLocation可能更好地被认为是"店主"。标准用户可以决定他们信任某些私有CA颁发的证书,因此他们可以将其添加到其根存储中。由于它是他们的商店,因此不会影响系统上的任何其他用户。该系统本身也拥有商店。例如,计算机的TLS证书确实属于"计算机",并且多个管理员可能参与管理它。由于搜索朋友的内容非常不寻常,因此StoreLocation归结为我作为用户" (CurrentUser)或"这台电脑" (LocalMachine)要使用的商店。

现在情况变得有些模糊:在Windows上,几乎每个CurrentUser商店(除了My商店都有明显的例外)都会将一个视图暴露给LocalMachine等效商店。因此,当您枚举CurrentUser \ Root中的证书时,您将两者明确添加到CurrentUser \ Root的证书以及明确添加到LocalMachine \ Root的证书。这可能会引起混淆,因为您在枚举时可以看到证书,以Remove作为参数调用它,并且在再次枚举时它仍然存在。

根据我的经验,大多数与证书商店的互动都是在我的商店。在这一点上,决策树归结为这样的事情:

  • 我是一个拥有专用用户帐户的服务吗?
    • new X509Store(StoreName.My, StoreLocation.CurrentUser)
  • 我是否在没有专用用户帐户的情况下为服务?
    • new X509Store(StoreName.My, StoreLocation.LocalMachine)
  • 否则
    • new X509Store(StoreName.My, StoreLocation.CurrentUser)

但这是一个很大的概括。

答案 1 :(得分:1)

LocalMachine的个人存储包含机器证书。存在于此类存储中的证书示例是IIS使用的SSL证书,用于保护HTTP流量。机器上只有一个这样的商店。

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