Asp.net mvc 我们可以在客户机-服务器体系结构中使用智能卡身份验证吗?

Asp.net mvc 我们可以在客户机-服务器体系结构中使用智能卡身份验证吗?,asp.net-mvc,ssl,iis,c#-4.0,smartcard,Asp.net Mvc,Ssl,Iis,C# 4.0,Smartcard,我正在尝试开发ASP.NETWeb应用程序以接受智能卡身份验证。我已经创建了web应用程序,并在IIS中部署了它。根证书安装在由CA授权的IIS计算机受信任根目录上。对于该web应用,我添加了服务器证书,设置为需要SSL,并设置为接受证书。 当客户端访问此web应用程序时,它会提示输入客户端证书,chrome会提示输入客户端证书,智能卡会插入客户端机器,当询问PIN时,用户输入有效PIN,我就可以获得web应用程序的主页。到目前为止,一切都按预期工作,但在这一点上,我希望读取客户端证书,并希望使

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

`

`

这里,
store.Certificates.Count
的值为0


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

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

如果您正在查找“我的”存储,则当前用户的证书将位于该存储中

如果出于某种原因要在ASP.NET应用程序的上下文中验证当前用户证书,则需要使用X509Chain()而不是X509Store

这篇文章可能也会有帮助:


Ryan

我获得了客户端证书,但没有私钥,如下所示:

var x509=新的X509Certificate2(this.Request.ClientCertificate.Certificate);


此证书可以通过chain进行验证。

感谢您的帮助,我之所以提到根位置是因为,我的登录窗口在服务器端,在我的IIS服务器上,证书安装在根位置。基本上,我在看的是,在我的ASP.Net web应用程序中,当PIN被验证时,我应该获取数字签名数据,以验证接下来的步骤,如用户在当前时间戳中是否有效等。当用户输入PIN时,我如何获取数字签名数据?根存储只是一个自签名根证书列表,您认为是“本地机器”范围不是“根存储”。但是,正如我所说的,您不希望查看要验证客户提供的链的信任锚列表。
X509Store store = null;
store = new X509Store(StoreName.Root);
store.Open(OpenFlags.ReadOnly);
var certsAuthEnc = store.Certificates.Find(X509FindType.FindByKeyUsage, (int)CertificateType.DigitalSignature, false);