无法在服务器上找到客户端X509Certificate

时间:2014-06-26 14:48:15

标签: asp.net

在Localhost下面代码工作正常,但在服务器上它无法找到客户端证书。

            X509Store store = new X509Store(StoreName.My,StoreLocation.CurrentUser);
            store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
            X509Certificate2Collection certificates = (X509Certificate2Collection)store.Certificates;
            store.Close();
            foreach (X509Certificate2 certificate in certificates)
            {

                    string SerialNumber = certificate.SerialNumber;
            }
        }

2 个答案:

答案 0 :(得分:0)

我打赌你还没有把证书放在app pool的身份存储中,而是放在另一个用户的商店里(你自己?)。

请注意,搜索标记CurrentUser确实意味着当前用户,在服务器上当前用户是应用程序池的标识。

答案 1 :(得分:0)

您无法使用服务器端代码枚举客户端的证书 - 使用浏览器的人员。它与localhost一起使用的原因是因为客户端和服务器碰巧是同一台计算机,所以它似乎可以工作。您正在使用的代码是搜索服务器上的证书存储区。

可以将IIS配置为要求客户端使用客户端证书发送某些类型的证书,但这有一定的局限性。将IIS配置为接受客户端证书后,您可以通过查看Web请求的ClientCertificate属性来访问客户端提供的证书。

所有人都说,客户证书可能不会像你期望的那样工作。使用浏览器的人选择要发送的证书,您不能只是从客户端开始随意取消证书。