我正在开发一个dotnetcore2.0MVC应用程序,它需要包含一个客户端证书。
我创建了根CA信任证书和吊销证书,它们安装在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>当我尝试调试应用程序时,我得到一个错误"Unable to start dotnet.exe。the server returned 403error“-并且完整的响应已写入HttpFailure_xx.html。HttpFailure文件显示“您的客户端证书不受信任或无效”。
错误发生在打开web浏览器进行调试之前- Visual Studio 2017显示了一条带有错误的系统消息。
我已经按照该页面上的说明进行了验证:“在受信任的根证书颁发机构证书库中有一个或多个非自签名证书。非自签名证书是指”颁发给“和”颁发人“值不完全匹配的任何证书。-检查后没有。
如果不对iis-express配置进行上述更改,则Context.Connection.ClientCertificate始终为空。
在过去的两天里,我读了一篇又一篇关于这方面的文章,但我找不到任何适合我的解决方案。
请注意,我已经检查了是否通过HttpClient正确发送了ClientCertificate。
发布于 2018-06-01 13:15:50
我的结论是,问题出在调试的配置方式上。Kestrel ListenOptions针对HTTPS进行了配置,并包含指定的服务器证书并要求使用客户端证书进行身份验证。
如果我更改应用程序的Debug属性并将“Launch:”IIS-Express切换到Project,现在调试将在控制台窗口(而不是浏览器)中打开Kestrel-server。
现在,如果我调用Kestrel-Urls,Client-Certificate不再为空,并且我能够验证请求等。
在IIS-Express中调试时,我看到服务器证书(在浏览器中)是'localhost',而不是我在Kestrel Listen-Options中指定的证书。
我想知道的是:是否有可能以某种方式将IIS-Express配置为使用与为Kestrel设置的相同的服务器证书?或者,在本地调试此应用程序以启动项目是唯一的方法吗?
谢谢
https://stackoverflow.com/questions/50626961
复制相似问题