我基本上有同样的问题充当反向代理时添加客户端证书(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>