从证书商店C#MVC获取X509Certificate列表

时间:2015-08-10 16:25:28

标签: c# windows model-view-controller x509certificate x509certificate2

我正在尝试从证书商店获取证书列表。这是我在帖子Get list of certificates from the certificate store in C#中使用的代码:

X509Store store = new X509Store(StoreName.My);
store.Open(OpenFlags.ReadOnly);
foreach (X509Certificate2 mCert in store.Certificates)
{
  // TODO
}

当我从Test Explorer运行此代码时,查找所有可用的证书,但是当我在我的MVC应用程序上运行它时,没有返回任何证书。 我以管理员身份运行VS 2013.

请你告诉我我做错了什么?

修改

当我在IIS Express上运行代码时,我正在获取证书列表,但是当我在本地IIS上运行它时,我没有得到任何结果。

此致

3 个答案:

答案 0 :(得分:2)

大多数情况下,您要检查机器商店证书,而不是当前用户的证书。要做到这一点:

X509Store store = new X509Store(StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
foreach (X509Certificate2 certificate in store.Certificates)
{
    // TODO
}

无论IIS用户如何,这都会为您提供一致的列表。

答案 1 :(得分:1)

如果您尝试接受来自用户的证书,则需要将IIS正确配置为使用HTTPS并从客户端接受SSL。您无法使用IIS Express,而不是在代码中进行一些更改,而是说IIS 8.0。

How do I get the X509Certificate sent from the client in web service?中查看最受好评的答案,了解IIS代码。

对于IIS Express,您无法配置SSL设置,因此如果您想伪获取x509属性,可以从本地存储中执行此操作。看起来这就是您现在正在做的事情,因为ApplicationPoolIdentity没有权限访问证书存储,因此无法在您的本地IIS上工作。

答案 2 :(得分:0)

可能你可以试试这个。

X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
foreach (X509Certificate2 mCert in store.Certificates)
{
    // TODO
}

您可以使用此链接X509Store Class

上提供的示例来迭代计算机上存在的商店位置和认证