充当反向代理时添加客户端证书

充当反向代理时添加客户端证书

我基本上有同样的问题充当反向代理时添加客户端证书(Apache/NGINX),但就我而言,没有 nginx 可以帮助我。

我希望虚拟主机内的某个位置充当第三方服务器的反向代理,例如

<Location /mylocation/>
        ProxyPass          https://thirdparty.example:2345/foo/
        ProxyPassReverse   https://thirdparty.example:2345/foo/
</Location>

https://thirdparty.example:2345/foo/但是需要使用客户端证书进行身份验证。我想向我的用户隐藏这个事实。他们一定不需要提供客户端证书。相反,我希望 Apache 使用存储在服务器上的证书。

如何才能做到这一点?

答案1

当 Apache 配置为代理时,有 2 个单独的 HTTP(S) 连接:

  • 一个从 HTTP 客户端连接到您的 Apache
  • 从 Apache 复制到其他服务器

第一个连接的客户端无法直接知道您的 Apache 是否在作为代理运行,也无法知道它究竟连接到哪里。两个连接几乎同时共存。这与 HTTP 重定向完全相反,在 HTTP 重定向中,客户端会获取新的 URL,因此实际上会建立 2 个连接,但一个接一个。

因此:

我想向我的用户隐藏这个事实。

这是通过使用 Apache 作为代理来实现的。

他们一定不需要提供客户端证书。

除非您的 Apache 配置为要求提供上述配置所涵盖的路径的客户端证书,否则他们不会这样做。

相反,我希望 Apache 使用存储在服务器上的证书。

与 TLS 相关的一切都在mod_ssl文档的 控制之下http://httpd.apache.org/docs/2.4/mod/mod_ssl.html

您最感兴趣的将是那里SSLProxyMachineCertificateFile及其周围环境,正如它所描述的那样:

 This directive sets the all-in-one file where you keep the certificates and keys used for authentication of the proxy server to remote servers. 

注意它可能出现的上下文:全局服务器、虚拟主机或代理指令(因此你不能将它直接放在你的Location块中)

因此你需要添加类似以下的内容:

<Proxy "https://thirdparty.example:2345/foo/*">
    SSLProxyMachineCertificateFile /some/path
</Proxy>

相关内容