2017-08-18 44 views
0

我正在尝试开发ASP.Net Web应用程序来接受智能卡身份验证。我已经创建了Web应用程序,并将它部署在IIS中。根证书安装在由CA授权的IIS计算机可信根目录中。对于该Web应用程序,我添加了服务器证书,设置了要求SSL并将其设置为接受证书。 当客户端访问该Web应用程序时,它会提示客户端证书,chrome会提示客户端证书,将智能卡插入客户端计算机,并且当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); 

`

这里,store.Certificates.Count即将为0

请帮帮忙,我怎么能阅读客户端证书?

回答

0

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

此证书可与链进行验证。

0

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

当前用户的证书将位于“我的”商店中,如果这是您正在寻找的。

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

这个职位将可能也是有帮助的:https://msdn.microsoft.com/en-us/library/ms148581(v=vs.110).aspx

瑞安

+0

感谢您的帮助,为什么我指的是根位置,我的登录窗口位于服务器端,位于我的IIS服务器上,证书安装在根位置。 基本上,我所看到的是,在我的ASP .Net网络应用程序中,当PIN被验证时,我应该得到该数字签名数据以验证下一步如果用户在当前时间戳中有效等。 我怎样才能得到当用户输入PIN码时数字签名的数据? –

+0

根存储只是一个自签名根证书列表,您认为“本地计算机”范围不是“根存储”。但是,正如我所说的,您不希望查看您希望验证客户端呈现的链的信任锚的列表。 – rmhrisk

相关问题