从证书存储c# MVC中获取x509证书列表

本文关键字:证书 获取 x509 列表 MVC 存储 | 更新日期: 2023-09-27 18:07:08

我正试图从证书存储中获取证书列表。这是我从这篇文章中使用的代码从c#的证书存储中获取证书列表:

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

当我从测试资源管理器中运行此代码时,可以找到所有可用的证书,但是当我在MVC应用程序上运行它时,没有返回任何证书。我以管理员身份运行VS 2013。

你能告诉我我做错了什么吗?

编辑:

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

认为,

从证书存储c# MVC中获取x509证书列表

大多数情况下,您希望检查机器存储证书,而不是当前用户的证书。

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

这给你一个一致的列表,无论IIS用户。

如果您试图接受来自用户的证书,则需要正确配置IIS以使用HTTPS并接受来自客户端的SSL。如果不对代码做一些修改,你将无法从IIS Express切换到IIS 8.0。

查看我如何在web服务中获得从客户端发送的x509证书中排名最高的答案?查看IIS代码。

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

也许你可以试试。

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

您可以使用此链接提供的示例迭代您的计算机上存在的商店位置和证书X509Store Class