如何获得特定商店的证书CN?

时间:2011-10-03 10:40:10

标签: c# .net ssl ssl-certificate x509certificate

我想获取存储在我的商店中的证书的 CN ,因为我想验证,如果证书< / strong>在该商店中是否存在。

我不知道应该使用哪种方法来执行此任务。

我尝试使用下面的代码,但它不起作用

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

if(cers.Count>0)
{

//certificate present

}

else
{

//certificate not present

}

subjectName是否为CN

还有其他方法吗?

请建议我如何检查特定证书是否存在,我想使用CN。

1 个答案:

答案 0 :(得分:12)

您可以使用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. 根据指纹,您会找到证书的指纹。
  5. 希望,这有帮助。