我在.Net Core2.1中开发了一个简单的WEB服务
我正在尝试实现一个客户端证书身份验证,因此我只能将访问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。
如何强制IIS express请求客户端证书?
发布于 2018-12-13 13:10:33
为了使用ASP.NET核心身份验证堆栈进行适当的证书身份验证,您还可以通过巴里·多兰斯自己签出idunno.Authentication.Certificate。它允许您为您的应用程序启用证书身份验证,并像处理任何其他身份验证方案一样处理它,这样您就可以将实际的基于证书的逻辑排除在业务逻辑之外。
这个项目包含了证书认证 for ASP.NET Core的一个实现。证书身份验证发生在TLS级别,在它到达ASP.NET核心之前很久,因此,更准确地说,这是一个验证证书的身份验证处理程序,然后提供一个事件,您可以在该事件中将该证书解析为ClaimsPrincipal。 您必须使用配置您的主机进行证书身份验证,无论是IIS、Kestrel、Azure应用程序还是其他您正在使用的应用程序。
确保还检查了如何正确设置“文件”,因为它要求主机配置正常工作,就像您对IIS所做的那样。还包括其他服务器的说明,如原始的Kestrel、IIS、Azure或一般反向代理。
发布于 2018-12-13 12:40:58
为了使IIS Express能够开始请求客户端证书并将它们传递给服务器端,必须编辑配置文件:
整个配置位于.vs\config\applicationhost.config中的解决方案文件夹中。
确保设置下列值:
<security>
<access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />
和
<iisClientCertificateMappingAuthentication enabled="true"></iisClientCertificateMappingAuthentication>
发布于 2019-07-30 14:14:17
对于本地测试,可以从Visual在IIS Express中启用SSL。在“属性”窗口中,将“启用SSL”设置为“真”。注意SSL的值;使用此URL测试HTTPS连接。
谁需要这里的细节
https://stackoverflow.com/questions/53761660
复制相似问题