【问题标题】:How to setup IIS to verify a client certificate and pass it to the backend as an http header?如何设置 IIS 来验证客户端证书并将其作为 http 标头传递给后端?
【发布时间】:2018-03-20 21:27:34
【问题描述】:

我已经阅读了很多关于 IIS 中客户端证书身份验证的文章,但他们大多谈论的是客户端证书的 Required 模式。在这种情况下,身份验证在 Web 服务器端完全完成,如果证书丢失或无效,用户将被重定向到错误页面。我需要配置 IIS 以检查客户端证书是否存在,并将结果作为 http 标头传递给我的后端。它可以通过 nginx 或 apache web 服务器轻松完成。客户端认证可以设置为optional。然后,Web 服务器检查证书并将检查结果作为 SSL_CLIENT_CERT(证书的 PEM 表示)和 SSL_CLIENT_VERIFY(检查结果 - SUCCESS、NONE、...)标头传递给应用程序后端.因此,在后端部分,我可以读取标头并使用这些值进行实际身份验证——在数据库中找到一个用户,发出一个身份验证令牌。可以在 IIS 中使用吗?如果是,是否有任何关于如何绕过证书和检查状态作为 http 标头的文档?

【问题讨论】:

    标签: authentication ssl iis client-certificates


    【解决方案1】:

    过了一会儿,我正在写我的问题的答案。

    必须使用 ARR 扩展设置 IIS 才能充当反向代理。然后,可以为默认网站启用客户端证书身份验证。这里有几个链接说明如何实现它:

    以及对 SSL/TLS 握手和证书的一般解释的几个链接:

    基本上,应为 IIS 启用应用程序请求路由 (ARR) 扩展以充当代理。然后,您设置代理绕过路由。接下来,您需要为 IIS 服务器设置一个有效的服务器证书,并在默认网站 https 绑定中使用它。证书应由 CA 颁发,该证书应放入本地计算机的受信任的根证书颁发机构和中间证书颁发机构。然后,您应该在默认网站的 SSL 设置中要求 SSL,并且客户端证书设置等于接受。在这种情况下,任何连接到 Web 服务器的客户端都将被要求提供由与服务器证书相同的 CA 颁发的有效客户端证书。

    实际上,IIS 将 Web 服务器信任的根颁发者的可分辨名称列表发送到客户端浏览器。浏览器找到此名称与客户端信任的证书颁发者的交集,并在交集中查找颁发者已颁发的有效证书。之后,用户选择其中之一(或不选择),并根据 CA 证书检查所选证书。如果证书通过检查,则请求将“重定向”到后端应用程序,证书位于 X-ARR-ClientCert 标头中。可以在 Server -> Configuration Editor -> system.webServer/proxy -> clientCertHeaderName IIS 参数中更改标头的名称。如果用户选择(或没有)任何所需的证书,则请求将“重定向”到没有标头的应用程序后端。

    似乎,SSL_CLIENT_VERIFY 标头中根本不需要检查状态。如果证书有效,则在标头中传递。如果证书丢失,则标头为空。如果证书由客户端提供但无效,则请求失败并且根本不会“重定向”到后端应用服务器。似乎,这是一个罕见的情况,但我有一个例子。

    想象一下,服务器证书由具有专有名称 XXX 的 CA 颁发,而客户端证书 YYY(在客户端计算机上)由具有专有名称 XXX 的 CA 颁发,但是这些 CA 不相同(其中一个或两个都是自签名的)。在这种情况下,YYY 证书出现在浏览器显示的证书选择对话框中,但该证书未通过针对真实 Web 服务器 CA 的进一步验证。

    就是这样。此外,似乎 IIS 无法仅要求(或接受)某些应用程序端点(地址)的客户端证书。除了为整个网站启用之外,我没有找到任何其他选项。

    【讨论】:

    【解决方案2】:

    IIS ARR 也可以为后端或上游服务器配置客户端证书。在这种情况下,连接到此 IIS 的用户不需要提供证书,因为它会由 IIS 自动附加。

    此配置仅在 IIS 服务器级别可用。

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 2013-09-03
      • 1970-01-01
      • 2012-09-22
      • 2021-10-10
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多