是否可以在不在 Web 服务器上运行 HTTPS 的情况下进行客户端证书认证?

是否可以在不在 Web 服务器上运行 HTTPS 的情况下进行客户端证书认证?

(请注意:这个问题是众多“你为什么不尝试一下?”问题中的一个。我当然会尝试,但由于我没有通过谷歌搜索找到一个明显的答案,所以我想我也可以通过在 ServerFault 上提问来让以后可能需要这个问题的人更容易找到答案)

我的 Web 应用程序通过 HTTPS 在某些负载均衡器后面提供服务,并允许用户在某些情况下使用客户端证书进行身份验证。现在有人问我是否愿意将 SSL 加密/解密卸载到负载均衡器,这样我就可以运行一个普通的 HTTP 站点(从而更容易调试和配置),而负载均衡器将为用户执行 HTTPS。免费的额外 CPU 周期听起来确实不错,但是,我不确定我是否仍然能够检查用户的客户端证书。

不运行完整的 HTTPS 站点是否可以使用客户端证书?

答案1

这取决于您如何使用客户端证书来验证和授权用户。您是否允许任何拥有由您认识的人签名的证书的人使用,还是必须签名并且 CN 等于某个特定的东西或等于某个组中的用户?您当前的 Web 服务器是否处理授权,或者您的应用程序是否处理授权?

执行此操作的典型方法是终止负载均衡器上的 SSL 连接。此负载均衡器将是“成熟的 HTTPS 站点”,需要配置为请求客户端证书。然后,您的负载均衡器将执行检查以查看证书是否由受信任的 CA 签名。然后,负载均衡器会将 SSL 证书的详细信息(例如 DN)作为 HTTP 标头添加到向您的应用发送的纯 HTTP 请求中。然后,您的应用将检查这些 HTTP 标头并根据应用和负载均衡器之间的信任授权用户。我已经看到所有主要负载均衡器(例如 F5、ZXTM 甚至 Apache HTTP Server)都已完成此操作。

相关内容