首页 > 解决方案 > 在 ASP.Net WebAPI 中选择性地接受客户端证书

问题描述

我有一个请求,允许客户选择使用 mTLS(相互身份验证)对我们的服务进行身份验证。我遇到的问题是我只想在一个端点上并且仅在特殊情况下才允许这样做。我不想在每个请求上全局接受或要求客户证书。IIS 中的设置允许忽略、接受或要求。

在此处输入图像描述

当我将其设置为接受并在 Chrome 中浏览到该站点时,我会弹出此弹出窗口

在此处输入图像描述

如果证书被传递到特定端点但不改变其他端点的行为,是否有办法接受证书?

标签: asp.netiisasp.net-web-api

解决方案


要在特定路由上启用SSL 协商设置,您可以将该设置应用于特定位置

<location path="Route/Goes/Here">
  <system.webServer>
    <security>
      <access sslFlags="SslNegotiateCert"/>
    </security>
  </system.webServer>
</location>

根据 IIS 的设置方式,这可能会导致 500 错误,提示“此配置部分不能在此路径上使用。当该部分锁定在父级别时会发生这种情况。” 如果发生这种情况,您需要启用 SSL 设置读/写标志,如下所示:

SSL 设置读/写

或使用 Powershell:

Set-WebConfiguration  //System.WebServer/Security/access[@sslFlags] -metadata overrideMode -value Allow -PSPath IIS:/

推荐阅读