2011-10-03 85 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下你会发现你的证书的指纹。

希望,这有助于。