为代理

时间:2017-12-22 05:25:21

标签: apache ssl

我有3个后端API服务器(HTTPS),API服务器根据用户证书对不同用户拥有不同的授权权限,我正在配置apache以对3个后端服务器进行负载均衡,如下所示

<VirtualHost *:zzzz>
       SSLEngine on
       SSLCertificateFile /path/to/server.crt
       SSLCertificateKeyFile /path/to/server.key
       SSLCACertificateFile /path/to/ca.crt
       SSLProxyEngine on
       SSLProxyVerify none
       SSLProxyCheckPeerCN off
       SSLProxyCheckPeerName off
       SSLProxyCheckPeerExpire off
       <Proxy balancer://api_server>
           BalancerMember https://xx.xx.xx.xx:yyyy
           BalancerMember https://xx.xx.xx.xx:yyyy
       </Proxy>
       ProxyPass / balancer://api_server/
</VirtualHost>

问题是,当客户端请求apache,带有证书时,只有请求进入API服务器,而不是证书,API服务器响应未经授权的用户,我尝试使用SSLProxyMachineCertificateFile但是它只接受一组证书,并且每次都传递相同的证书,但在这种情况下,授权仅基于证书发生。

有没有办法盲目地将HTTPS请求转发给API?或热烈欢迎任何其他建议。

2 个答案:

答案 0 :(得分:1)

将评论转换为答案,因为它解决了OP的问题。

用户与Apache交谈,然后Apache与平衡机通话。这是代理的重点,它确保客户端不直接与服务器通信。所以从平衡服务器的角度来看,Apache就是客户端。

我能看到的唯一方法就是使用不进行SSL卸载的第4层网络负载均衡器。即不是Apache

答案 1 :(得分:0)

尝试切换到AJP而不是HTTP代理,如Apache doc:https://httpd.apache.org/docs/2.4/en/mod/mod_proxy_ajp.html

中所述

如果我完全理解您所说的内容,您需要转发客户端证书,这是AJP的一项功能:

  

请求数据包结构

     

?ssl_cert 0x07字符串