Nei*_*her 2 .net c# windows certificate x509certificate
我在 C# DotNet 中使用 X509Store 来遍历证书存储。但是,我不清楚证书位置和证书存储之间有什么区别。例如,位置是 LocalUser 和 LocalMachine。商店的例子是 My (Personal) 和 Root。LocalMachine 上的 Personal 存储与 LocalUser 上的 Personal 存储有什么区别?在 LocalMachine 上拥有个人商店意味着什么?
有一些专用存储(粗体的 C# 名称,括号斜体的 UI 显示名称):
还有一些更标准的,您可以在 TechNet 上阅读它们。您还可以使用X509Store(string, StoreLocation)重载创建自己的证书存储。(有时它对管理应用程序很有用,但是当您在自定义存储中拥有私钥时,证书管理器 UI 会有些混乱;它只希望它们在我的存储中)。
这就是StoreName。StoreLocation 或许更好地被认为是“店主”。标准用户可以决定他们信任某个私有 CA 颁发的证书,因此他们可以将其添加到他们的根存储中。由于这是他们的商店,因此不会影响系统上的任何其他用户。该系统本身也拥有商店。例如,计算机的 TLS 证书确实属于“计算机”,并且可能涉及多个管理员来管理它。由于搜索朋友的东西非常不寻常,因此 StoreLocation 归结为“我,作为用户”(CurrentUser)或“这台计算机”(LocalMachine)用于哪个商店。
现在事情变得有些模糊:在 Windows 上,几乎每个 CurrentUser 存储(My 存储除外)都向 LocalMachine 等效存储公开了一个视图。所以,当你枚举CurrentUser \根证书你得到两个明确添加到CurrentUser \根证书,也明确添加到LOCALMACHINE \根证书。这可能会导致混淆,因为您可以在枚举时看到证书,将Remove其作为参数调用,再次枚举时它仍然存在。
根据我的经验,与证书商店的大多数交互都是在我的商店中进行的。在这一点上,决策树归结为这样的:
new X509Store(StoreName.My, StoreLocation.CurrentUser)new X509Store(StoreName.My, StoreLocation.LocalMachine)new X509Store(StoreName.My, StoreLocation.CurrentUser)但这是一个很大的概括。