我们可以在客户端服务器架构中使用智能卡身份验证吗?

Can we use smart card authentication in Client Server Architecture?

我正在尝试开发 ASP.Net 网络应用程序以接受智能卡身份验证。我已经创建了 Web 应用程序,并将其部署在 IIS 中。根证书安装在 CA 授权的 IIS 机器 Trusted Root 目录中。对于该 Web 应用程序,我添加了服务器证书,设置需要 SSL 并设置为接受证书。 当客户端访问此 Web 应用程序时,它提示输入客户端证书,chrome 提示输入客户端证书,将智能卡插入客户端机器,当询问 PIN 时,用户输入有效的 PIN,我能够得到Web 应用程序的主页。直到,这一切都按预期工作,但此时我想读取客户端证书并希望使用证书链验证该客户端。此外,基于客户端证书,我想获得该用户的角色。每次我尝试读取客户端证书时,我都无法获得证书。下面是读取智能卡证书的代码:

`

X509Store store = null;
store = new X509Store(StoreName.Root);
store.Open(OpenFlags.ReadOnly);
var certsAuthEnc = store.Certificates.Find(X509FindType.FindByKeyUsage, (int)CertificateType.DigitalSignature, false);

`

在这里,store.Certificates.Count 变为 0。

请帮忙,我如何在客户端读取证书?

在您的示例中,您正在打开当前用户 "Root" 商店,我不清楚为什么要给出您的描述。此存储仅包含已由管理员和当前用户配置的受信任根的列表。

当前用户的证书将在 "My" 商店中,如果您正在寻找的话。

如果您出于某种原因想要在 ASP.NET 应用程序的上下文中验证当前用户证书,您会希望使用 X509Chain (https://www.google.com/search?q=X509Chain&oq=X509Chain&aqs=chrome..69i57.318j0j7&sourceid=chrome&ie=UTF-8) 而不是 X509Store。

这个 post 可能也会有帮助:https://msdn.microsoft.com/en-us/library/ms148581(v=vs.110).aspx

瑞安

我得到了客户端证书,但没有私钥,如下所示: var x509 = new X509Certificate2(this.Request.ClientCertificate.Certificate);

这个证书可以用链来验证。