0

我正在创建需要客户端证书进行身份验证的 Web 应用程序。之后,用户必须用他的私钥签署一些文本并将其发送到服务器。收到数据后,我需要使用用户打开的密钥对其进行解密,该密钥已经存储在“其他人”证书存储的服务器上。我还需要检查此用户的证书是否在“不受信任的商店”中。这是我的 C# 代码。

X509Store store = new X509Store(StoreName.My);
store.Open(OpenFlags.ReadOnly);
int Count = store.Certificates.Count;
foreach (X509Certificate2 mCert in store.Certificates)
{
    ClientName2 = mCert.Subject;
}

        store.Close();

但是在我运行它之后,在个人商店中找不到任何证书。但我在 certmgr.msc 看到 tham 其他商店也有类似的情况——有些证书可以访问,有些则不能。我认为 ApplicationPoolIdentity 的 Windows 2008 r2 服务器权限不允许获取公共用户的证书。但我可能是错的......你能告诉我如何检查来自 iis 的存储访问权限吗?或者也许我需要使用其他方法?

2013 年 2 月 24 日(编辑):是的,这个问题似乎是由 IIS 权限引起的。如果我使用相同的代码运行控制台应用程序,一切正常。每个人都知道如何在 windows 2008 r2 上设置证书存储的读取权限吗?

4

1 回答 1

1

这是我在发布此问题后几天发现的解决方案。我的代码中有几个问题,但对于这个问题,我需要注意添加证书的位置。

我在 certmgr.msc 和 IE 中添加了证书。它们被自动添加到用户证书存储中,但 IIS 在计算机证书存储中查找证书!因此,当我从当前用户应用程序运行控制台应用程序时,请查看用户证书。而 IIS 则看其他地方。如果您希望您的证书在 IIS 上可见,请通过 mmc 控制台将它们添加到本地计算机存储中。

于 2013-02-27T10:37:36.130 回答