申请客户证书

时间:2016-06-27 13:55:28

标签: authentication asp.net-mvc-5 iis-express smartcard client-certificates

我已经看到很多未解决的问题。显然很多开发人员都遇到了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>

页面正常显示会发生什么,但我没有征求我的客户证书。

我显然拥有客户证书,所以我不确定为什么其他网站可以请求它们。

enter image description here

我使用的是IIS Express 10。

1 个答案:

答案 0 :(得分:0)

问题是Visual Studio 2015将其IIS Express applicationhost.config文件放在解决方案的其中一个子目录中。它位于.vs / config目录中。

我对遇到此问题的其他人的建议是:

(1)首先确保配置是关于您认为可行的(SslRequireCert或协商)。如果您知道applicationhost.config文件中的内容,那么该部分不太可能阻止您。

(2)其次,正确设置了证书。在我的情况下,我不认为这是一个问题,但它可能会阻止您阅读此属性。您应该能够打开mmc(在按下Windows按钮后键入mmc),转到证书(或者如果您没有,则添加快照),并确保个人/证书和中级证书/证书或可信任根证书/证书具有您需要的证书。

而且,正如我所说:

(3)确保您拥有正确的applicationhost.config。