我已经看到很多未解决的问题。显然很多开发人员都遇到了past这个问题,但我还没有看到任何解决方案。
我试图为我的ASP.NET MVC 5网络应用程序读取智能卡(X.509 CAC)。当我尝试像这样提取证书信息时:
var request = HttpContext.Request;
var cert = request.ClientCertificate;
证书有空值。
问题似乎是我没有提交请求用户证书信息的对话框,就像我在其他网站上看到的那样。 如何公开此对话框?
我在启用SSL的情况下运行它。我的applicationhost.config中有这个:
<authentication>
<anonymousAuthentication enabled="false"/>
<basicAuthentication enabled="false" />
<clientCertificateMappingAuthentication enabled="false" />
<digestAuthentication enabled="false" />
<iisClientCertificateMappingAuthentication enabled="true" manyToOneCertificateMappingsEnabled="true">
<manyToOneMappings>
<add name="Authentication Certificate"
enabled="true"
permissionMode="Allow"
userName="foo"
password="bar">
<rules>
<add certificateField="Issuer" certificateSubField="CN" matchCriteria="*localhost*" compareCaseSensitive="false" />
</rules>
</add>
</manyToOneMappings>
</iisClientCertificateMappingAuthentication>
<windowsAuthentication enabled="false">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
这是我的访问节点:
<access sslFlags="SslRequireCert" />
注意:用户名/密码= foo / bar看起来很可疑。为什么这会在用户端填充?是否需要与此相关联的服务帐户?
我也试过更简单的配置:
<authentication>
<anonymousAuthentication enabled="false" userName="" />
<basicAuthentication enabled="false" />
<clientCertificateMappingAuthentication enabled="true" />
<digestAuthentication enabled="false" />
<iisClientCertificateMappingAuthentication enabled="false">
</iisClientCertificateMappingAuthentication>
<windowsAuthentication enabled="false">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
页面正常显示会发生什么,但我没有征求我的客户证书。
我显然拥有客户证书,所以我不确定为什么其他网站可以请求它们。
我使用的是IIS Express 10。
答案 0 :(得分:0)
问题是Visual Studio 2015将其IIS Express applicationhost.config文件放在解决方案的其中一个子目录中。它位于.vs / config目录中。
我对遇到此问题的其他人的建议是:
(1)首先确保配置是关于您认为可行的(SslRequireCert或协商)。如果您知道applicationhost.config文件中的内容,那么该部分不太可能阻止您。
(2)其次,正确设置了证书。在我的情况下,我不认为这是一个问题,但它可能会阻止您阅读此属性。您应该能够打开mmc(在按下Windows按钮后键入mmc),转到证书(或者如果您没有,则添加快照),并确保个人/证书和中级证书/证书或可信任根证书/证书具有您需要的证书。
而且,正如我所说:
(3)确保您拥有正确的applicationhost.config。