iis表示客户端证书无效证书

时间:2018-05-31 14:42:05

标签: authentication .net-core iis-express

我正在开发一个dotnetcore 2.0 mvc应用程序,需要包含客户端证书。

我创建了Root CA Trusted证书和撤销证书,它们安装在LocalMachine的受信任的根证书颁发机构中。

makecert -n" CN = RootCaTest" -r -sv RootCaTest.pvk RootCaTest.cer makecert -crl -n" CN = RootCaTest" -r -sv RootCaTest.pvk RootCaTest.crl

然后我使用RootCaTest证书创建客户端证书: makecert -sk user -iv RootCaTest.pvk -n" CN = usercert" -ic RootCaTest.cer -sr currentuser -ss my -sky signature -pe

在IIS-Express applicationHost.config中,我已设置(根据其他文章)

<system.webServer>
  <security>
    <access sslFlags="Ssl, SslNegotiateCert" />
    ....
  </security>
  <authentication>
    <iisClientCertificateMappingAuthentication enabled="true"></iisClientCertificateMappingAuthentication>
    ....
  </authentication>
</system.webServer>

当我尝试调试应用程序时,出现错误,#34;无法启动dotnet.exe。服务器返回403错误&#34; - 并且完整的回复写入了HttpFailure_xx.html。 HttpFailure文件显示&#34;您的客户端证书不受信任或无效。&#34;

在打开Web浏览器进行调试之前发生错误 - Visual Studio 2017显示带有错误的系统消息。

我已按照该页面上的说明进行操作,以验证&#34;受信任的根证书颁发机构证书存储区中是否有一个或多个非自签名证书。非自签名证书是&#34;颁发给&#34;和&#34;发布者&#34;值不完全匹配。&#34; - 检查后没有。

如果没有对iis-express配置进行上述更改,则Context.Connection.ClientCertificate始终为null。

我过去两天在帖子后阅读有关此事的帖子,但我找不到任何可行的解决方案。

请注意,我已检查过ClientCertificate是否通过HttpClient正确发送。

1 个答案:

答案 0 :(得分:0)

我的结论是问题在于配置调试的方式。 Kestrel ListenOptions配置为HTTPS,并包括指定的服务器证书和要求客户端证书以进行身份​​验证。

如果我更改应用程序的Debug属性并将'Launch:'IIS-Express切换到Project,现在调试会在控制台窗口(而不是浏览器)中打开Kestrel服务器。

现在,如果我调用Kestrel-Urls,则客户端证书不再为null,我可以验证请求等。

在IIS-Express中调试时,我看到服务器证书(在浏览器中)是'localhost',而不是我在Kestrel Listen-Options中指定的那个。

我想知道的是: 有可能以某种方式配置IIS-Express使用与为Kestrel设置的服务器证书相同的服务器证书吗? 或者,是在本地调试此应用程序以启动项目的唯一方法吗?

由于