[英]X509Store Location versus Store?
我正在C#DotNet中使用X509Store遍歷證書存儲。 但是,我不清楚證書位置和證書存儲之間的區別。 例如,位置是LocalUser和LocalMachine。 商店的示例是“我的(個人)”和“根”。 LocalMachine上的個人商店與LocalUser上的個人商店有什么區別? 在LocalMachine上開設個人商店甚至意味着什么?
有一些專用的商店(C#名稱為粗體,UI顯示名稱為斜體):
還有更多其他標准的,您可以在TechNet上閱讀它們 。 您還可以使用X509Store(string, StoreLocation)
重載來創建自己的證書存儲。 (它有時對管理應用程序很有用,但是當您在自定義存儲區中擁有私鑰時,證書管理器UI會有些混亂;它僅在“我的存儲區”中才需要)。
這就是StoreName。 最好將StoreLocation視為“商店所有者”。 標准用戶可以確定他們信任某個私有CA頒發的證書,因此可以將其添加到其根存儲中。 由於是他們的商店,因此不會影響系統上的任何其他用戶。 系統本身也擁有商店。 例如,計算機的TLS證書確實屬於“計算機”,並且可能需要多個管理員來管理它。 由於搜索朋友的東西是非常不尋常的,因此StoreLocation會歸結為要使用哪個商店的“我作為用戶我”(CurrentUser)或“這台計算機”(LocalMachine)。
現在事情變得有些模糊:在Windows上,幾乎每個CurrentUser存儲(My商店都有一個明顯的例外)都將視圖公開到LocalMachine等效存儲中。 因此,當枚舉CurrentUser \\ Root中的證書時,您既要獲得明確添加到CurrentUser \\ Root中的證書,也要獲得明確添加到LocalMachine \\ Root中的證書。 這會引起混亂,因為您可以在枚舉時看到證書, Remove
其作為參數調用Remove
,並且再次枚舉時該證書仍然存在。
以我的經驗,大多數與證書存儲庫的交互都是在“我的存儲庫”中進行的。 此時,決策樹可歸結為以下內容:
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證書。 每個用戶都有自己的這種類型的商店。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.