无法从X.509商店获取当前用户证书

时间:2014-04-24 18:27:32

标签: c# asp.net ssl client-certificates x509certificate2

我正在开发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

2 个答案:

答案 0 :(得分:1)

您的IIS应用必须在IIS内置的ASP .net内运行,该帐户无权访问证书库。

解决此问题的一种方法是将用户更改为其他具有权限的用户,但这会导致安全问题。

更好的方法但更复杂的是使用提升的权限执行服务,该权限接受来自本地计算机的TCP / UDP /管道连接,检索证书并将其传递出去,这样您就可以安全地从您的服务中调用该服务asp.net页面没有给它提升权限

答案 1 :(得分:0)

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

了解更多信息read