Estou usando um servidor apache (2.4) configurado como loadbalancer na frente de 2 servidores apache. Funciona bem quando uso conexões http entre o loadbalancer e os back-end, no entanto, usar https não funciona. A configuração do loadbalancer:
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
<Proxy balancer://testcluster>
BalancerMember https://[Backend1]:443/test
BalancerMember https://[Backend2]:443/test
</Proxy>
ProxyPass /test balancer://testcluster
Os back-end só têm certificados autoassinados, e é por isso que a verificação do certificado está desativada.
O log de erros no loadbalancer contém o seguinte:
[proxy:error] [pid 31202:tid 140325875570432] (502)Unknown error 502: [client ...] AH01084: pass request body failed to [Backend1]:443 ([Backend1])
[proxy:error] [pid 31202:tid 140325875570432] [client ...] AH00898: Error during SSL Handshake with remote server returned by /test/test.jsp
[proxy_http:error] [pid 31202:tid 140325875570432] [client ...] AH01097: pass request body failed to [Backend1]:443 ([Backend1]) from [...] ()
A página de erro no navegador contém:
Proxy Error
The proxy server could not handle the request GET /test/test.jsp.
Reason: Error during SSL Handshake with remote server
Como já afirmei acima, alterar a configuração para o protocolo http e a porta 80 funciona. Também as conexões https entre o cliente e o loadbalancer funcionam, portanto, o módulo ssl do loadbalancer parece estar configurado corretamente. A conexão direta ao back-end via https também não gera erros.
Agradeço antecipadamente pelo seu tempo
Edit: Eu descobri, o problema é que o nome comum dos meus certificados não corresponde ao nome do servidor. Eu pensei que nenhum SSLProxyVerify faria com que essa incompatibilidade fosse ignorada, mas não. Antes do apache 2.4.5, essa verificação pode ser desativada com o SSLProxyCheckPeerCN desativado, mas em versões superiores (estou usando o 2.4.7) SSLProxyCheckPeerName desativado também precisa ser especificado.
Documentação do Apache para sslproxycheckpeername
A configuração de trabalho fica assim:
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
<Proxy balancer://testcluster>
BalancerMember https://[backend1]:443/test
BalancerMember https://[backend1]:443/test
</Proxy>
ProxyPass /test balancer://testcluster
Infelizmente, não posso responder minha própria pergunta por falta de reputação, por isso editei a minha pergunta. Espero que isso ajude quem encontrar um problema semelhante
fonte
Respostas:
O problema acabou sendo o nome comum dos certificados não corresponder ao nome do servidor.
Antes do Apache 2.4.5, essa verificação pode ser desativada,
SSLProxyCheckPeerCN off
mas em versões superiores (como 2.4.7)SSLProxyCheckPeerName off
também é necessário especificar.Documentação do Apache para
SSLProxyCheckPeerName
A configuração de trabalho fica assim:
Você pode verificar a versão do Apache que possui :
fonte
<Location /margin-tool> ProxyPass https://xxxx.thoughtworks.net:8443/margin-tool ProxyPassReverse https://xxxx.thoughtworks.net:8443/margin-tool </Location>
mesmas configurações não estão funcionando. Alguma ideia?A adição abaixo resolveu o problema
fonte
eu uso o apache 2.4.9 e adicionando ao httpd-ssl.conf o seguinte código
SSLProxyProtocol + SSLv3 + TLSv1 + TLSv1.1
eu resolvi os problemas
fonte