我在C#DotNet中使用X509Store来遍历证书库。但是,我不清楚证书位置和证书存储区之间的区别。例如,位置是LocalUser和LocalMachine。商店的例子是我的(个人)和根。 LocalMachine上的个人商店与LocalUser上的个人商店有什么区别?在LocalMachine上拥有个人商店甚至意味着什么?
答案 0 :(得分:3)
有一些专门的商店(C#名称以粗体显示,UI显示名称以括号斜体显示):
还有一些标准的,你可以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证书。每个用户都有他/她自己的这种类型的商店。