我已经在.Net Core 2.1中开发了一个简单的WEB API服务
我正在尝试实现客户端证书身份验证,因此我只能向在其计算机上安装了特定证书的客户端授予对API的访问权限。
客户端使用浏览器(Chrome,Edge,IE11或Firefox)访问API。
我已在API方法中添加了对证书的请求:
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
X509Certificate2 cert = Request.HttpContext.Connection.ClientCertificate;
if (cert!=null && cert.Verify())
{
//more verification here...
return Content("....", "application/json");
}
else
{
return Content("....", "application/json");
}
}
然后,我安装了自签名证书,并将其添加到“受信任的根”中,以实现客户端身份验证目的。
,但是变量 cert 始终为null,并且在我请求页面时浏览器甚至没有提示我使用证书。
我想是因为我必须在某个地方设置Web服务器必须请求客户端证书,因为可以在IIS中进行设置,但是在我的开发环境中,我使用的是IIS Express。
如何强制IIS Express请求客户端证书?
答案 0 :(得分:2)
要使用ASP.NET Core身份验证堆栈进行正确的证书身份验证,您还可以自己idunno.Authentication.Certificate签出Barry Dorrans。它允许您为应用程序启用证书身份验证,并像处理其他任何身份验证方案一样处理它,因此可以将实际的基于证书的逻辑排除在业务逻辑之外。
这种项目包含针对ASP.NET Core的Certificate Authentication的实现。证书身份验证发生在TLS级别,远远早于进入ASP.NET Core的时间,因此,更准确地说,这是一个身份验证处理程序,它可以验证证书,然后为您提供一个事件,您可以在其中将证书解析为ClaimsPrincipal。>
您必须configure your host进行证书身份验证,无论是IIS,Kestrel,Azure Web应用程序还是您正在使用的其他任何东西。
请确保也检查“documentation”的正确设置方法,因为它需要configuration of the host才能正常工作,就像使用IIS Express一样。包括对其他服务器(例如原始Kestrel,IIS,Azure或常规反向代理)的说明。
答案 1 :(得分:0)
为了使IIS Express可以开始请求客户端证书并将其传递到服务器端,必须编辑配置文件:
整个配置位于.vs \ config \ applicationhost.config中的解决方案文件夹中
确保设置以下值:
<security>
<access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />
和
<iisClientCertificateMappingAuthentication enabled="true"></iisClientCertificateMappingAuthentication>
答案 2 :(得分:0)
对于本地测试,可以在Visual Studio的IIS Express中启用SSL。在“属性”窗口中,将“已启用SSL”设置为True。注意SSL URL的值;使用此URL来测试HTTPS连接。
针对谁的需求 Details here