在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;
}
}
答案 0 :(得分:0)
我打赌你还没有把证书放在app pool的身份存储中,而是放在另一个用户的商店里(你自己?)。
请注意,搜索标记CurrentUser
确实意味着当前用户,在服务器上当前用户是应用程序池的标识。
答案 1 :(得分:0)
您无法使用服务器端代码枚举客户端的证书 - 使用浏览器的人员。它与localhost一起使用的原因是因为客户端和服务器碰巧是同一台计算机,所以它似乎可以工作。您正在使用的代码是搜索服务器上的证书存储区。
可以将IIS配置为要求客户端使用客户端证书发送某些类型的证书,但这有一定的局限性。将IIS配置为接受客户端证书后,您可以通过查看Web请求的ClientCertificate
属性来访问客户端提供的证书。
所有人都说,客户证书可能不会像你期望的那样工作。使用浏览器的人选择要发送的证书,您不能只是从客户端开始随意取消证书。