2011-10-03 82 views
4

我想獲得存儲在我的商店證書的CN我想驗證如果證書在那家商店的存在與否。如何獲取特定商店中的證書CN?

我不知道應該使用哪種方法來執行此任務。

我嘗試使用下面的代碼,但它不工作

X509Certificate2Collection cers = store.Certificates.Find(X509FindType.FindBySubjectName,"Root_Certificate",false); 

if(cers.Count>0) 
{ 

//certificate present 

} 

else 
{ 

//certificate not present 

} 

是否主旨名稱給CN

還有其他方法嗎?

請建議我如何檢查一個特定的證書是否存在,我想用CN來做。

回答

10

您可以使用store.Certificates.Find(X509FindType.FindBySubjectName, "SubjectName", false) 函數按其主題名稱搜索證書。不要在主題名稱中包含「CN =」。

要搜索更具體的您可以使用指紋搜索您的證書。 下面的代碼示例演示了這一點:

X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
store.Open(OpenFlags.ReadOnly | OpenFlags.IncludeArchived); 

foreach (var c in store.Certificates) 
{ 
    Console.Out.WriteLine(c.Thumbprint); 
    Console.Out.WriteLine(c.Subject); 
} 

// Find by thumbprint 
X509Certificate2Collection col = 
store.Certificates.Find(X509FindType.FindByThumbprint, "669502F7273C447A62550D41CD856665FBF23E48", false); 

store.Close(); 

我添加了一個foreach循環的代碼示例遍歷所有證書在選擇商店。 您的證書必須在那裏列出。如果沒有,你可能會使用錯誤的商店。 請注意,我的商店爲機器當前用戶。所以,一定要打開正確的商店。

要獲取證書的指紋請按照下列步驟操作:

  1. 打開certmgr.msc。
  2. 雙擊您的證書。
  3. 轉到詳細信息選項卡。
  4. 在thumbprint下你會發現你的證書的指紋。

希望,這有助於。