我正在尝试从证书商店获取证书列表。这是我在帖子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上运行它时,我没有得到任何结果。
此致
答案 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
上提供的示例来迭代计算机上存在的商店位置和认证