我在IIS中阅读了很多关于客户端证书身份验证的文章,但他们主要讨论客户端证书的Required
模式。在这种情况下,身份验证在Web服务器端完全完成,如果证书丢失或无效,用户将被重定向到错误页面。我需要的是配置IIS以检查客户端证书是否存在,并将结果作为http标头传递给我的后端。可以使用nginx或apache Web服务器轻松完成。客户端身份验证可以设置为optional
。然后,Web服务器检查证书并将检查结果作为SSL_CLIENT_CERT
(证书的PEM表示)和SSL_CLIENT_VERIFY
(检查结果 - SUCCESS,NONE,...)标头传递到应用程序后端。因此,在后端部分,我可以读取标头并使用这些值进行实际身份验证 - 在数据库中查找用户,发出身份验证令牌。在IIS中有可能吗?如果是,是否有任何关于如何绕过证书和检查状态为http标头的文档?
答案 0 :(得分:0)
过了一会儿,我正在回答我的问题。
IIS必须设置ARR扩展才能充当反向代理。然后,可以为默认网站启用客户端证书身份验证。以下是指示如何实现它的几个链接:
以及一些非常可靠的解释SSL / TLS握手和证书的链接:
基本上,应启用应用程序请求路由(ARR)扩展,以使IIS充当代理。然后,您设置代理绕过路由。接下来,您需要为IIS服务器设置有效的服务器证书,并在默认网站https绑定中使用它。证书应由CA颁发,该证书应放入本地计算机的受信任的根证书颁发机构和中间证书颁发机构。然后,您应该在默认网站的SSL设置中要求SSL,其客户端证书设置等于Accept。在这种情况下,任何连接到Web服务器的客户端都将被要求提供由与服务器证书相同的CA颁发的有效客户端证书。
实际上,IIS会将Web服务器信任的根颁发者的可分辨名称列表发送到客户端浏览器。浏览器找到这些名称与客户端可信证书颁发者的交集,并查找交叉发布者发布的有效证书。之后,用户选择其中一个(或无),并根据CA证书检查所选证书。如果证书通过了检查,则请求被重定向"使用X-ARR-ClientCert
标头中的证书到后端应用程序。可以在服务器中更改标题的名称 - >配置编辑器 - > system.webServer / proxy - > clientCertHeaderName IIS参数。如果用户选择(或没有)所需的证书,则该请求被重定向"到没有标题的app后端。
似乎,SSL_CLIENT_VERIFY
标题中根本不需要检查状态。如果证书有效,则在标题中传递。如果缺少证书,则标头为空。如果证书由客户提供但无效,则请求失败并且未被重定向"到后端应用服务器。似乎,这是一个罕见的情况,但我有一个例子。
想象一下,服务器证书由具有可分辨名称XXX
的CA颁发,并且有一个客户端证书YYY
(在客户端计算机上)由具有可分辨名称的CA颁发XXX
但这些CA不相同(其中一个或两个都是自签名的)。在这种情况下,YYY
证书存在于浏览器显示的证书选择对话框中,但证书未通过对真实Web服务器CA的进一步验证。
那就是它。此外,似乎IIS无法仅为某些应用程序端点(地址)要求(或接受)客户端证书。除了启用整个网站之外,我还没有找到任何其他选择。
答案 1 :(得分:0)