C# Can';无法从X.509存储获取当前用户证书

C# Can';无法从X.509存储获取当前用户证书,c#,asp.net,ssl,client-certificates,x509certificate2,C#,Asp.net,Ssl,Client Certificates,X509certificate2,我正在开发Asp.net应用程序,我想在其中读取x509Store中的当前用户证书…对于我的本地计算机来说,它工作正常。。当我在IIS上部署应用程序时…我无法选择将用于应用程序身份验证的当前用户证书 以下代码适用于本地系统 public X509Certificate2 selectCert(StoreName store, StoreLocation Location , string windowTitle, string windowMsg) { X509Ce

我正在开发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在服务器上提供空集合…对于当前用户,我已经检查了我的个人存储(通过certmgr.mmc),我确信我有证书…关键问题请解决…我不明白。。发生了什么事


Thanx

您的IIS应用程序必须在IIS中的ASP.net内置帐户下运行,该帐户没有访问证书存储的权限

解决方法之一是将用户更改为其他wihch拥有权限的用户,但这将导致安全问题


一种更好但更复杂的方法是使用提升的权限执行服务,该服务接受来自本地计算机的输入TCP/UDP/pipes连接,检索证书并分发出去,通过这种方式,您可以从asp.net页面安全地调用该服务,而无需授予其提升权限

如果您以CurrentUser身份安装了证书,则只有在您的用户名下运行的服务才有权访问。 为了访问计算机中所有用户名的证书,必须将证书安装为LocalMachine,并使用LocalMachine检索该证书


有关更多信息

在运行IIS的用户下以及在何处部署了证书(此用户是同一用户)?我需要当前用户的所有浏览器证书…存储在x509证书存储中…在个人选项卡中..N我在本地IIS部署应用程序..具有相同用户..正如Gusman在另一个回答中解释的,您正在没有CurrentUser存储的帐户下运行IIS。但是,问问自己为什么需要那家商店。您可以将所有需要的证书放入LocalMachine store,IIS服务器可以访问它。我的应用程序托管在服务器上…如果我将使用本地计算机,那么它将提供服务器证书…我需要每个用户都有我提供的客户端证书。。仅访问应用程序