我正在开发Asp.net应用程序,其中我想从x509Store读取当前用户证书...它适用于我的本地机器...当我在IIS上部署应用程序时......我不能选择我将用于应用程序身份验证的当前用户证书...
这是遵循本地系统正常工作的代码..
public X509Certificate2 selectCert(StoreName store, StoreLocation Location , string windowTitle, string windowMsg)
{
X509Certificate2 certSelected = null;
X509Store x509Store = new X509Store(store);
x509Store.Open(OpenFlags.ReadWrite);
X509Certificate2Collection col = x509Store.Certificates;
X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(col, windowTitle, windowMsg, X509SelectionFlag.SingleSelection);
if (sel.Count > 0)
{
X509Certificate2Enumerator en = sel.GetEnumerator();
en.MoveNext();
certSelected = en.Current;
}
x509Store.Close();
return certSelected;
}
这里x509Store.Certificates返回一些当前用户证书的集合.. 但是当我在ISS中运行已部署的应用程序时。 x509Store.Certificates在Sever上提供空集合...对于当前用户和我已经检查了我的私人商店(通过certmgr.mmc),我确信我有证书......关键问题请解决......我无法理解......发生了什么事......
Thanx
答案 0 :(得分:1)
您的IIS应用必须在IIS内置的ASP .net内运行,该帐户无权访问证书库。
解决此问题的一种方法是将用户更改为其他具有权限的用户,但这会导致安全问题。
更好的方法但更复杂的是使用提升的权限执行服务,该权限接受来自本地计算机的TCP / UDP /管道连接,检索证书并将其传递出去,这样您就可以安全地从您的服务中调用该服务asp.net页面没有给它提升权限
答案 1 :(得分:0)
如果您已将证书安装为CurrentUser,则只有以您的用户名运行的服务才能访问。 要访问计算机中所有用户名的证书,您必须将证书安装为LocalMachine并使用LocalMachine检索该证书
了解更多信息read