Usando Https entre Apache Loadbalancer e back-end

30

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

user3240383
fonte
Interessante. Eu costumava fazer isso com o apache2.2 e nunca tinha que usar o SSLProxyVerify nenhum e nunca tive problemas com certificados de autoassinatura. Você tem certeza de que o servidor back-end está bom.
ETL
@ETL Não sei se "SSLProxyVerify none" é necessário ou não, apenas acrescentei que, na esperança de que isso possa resolver o problema. A chamada "wget ​​https: // [backend1] /test/test.jsp --no-check-certificate" no servidor do balanceador de carga baixa o arquivo esperado. ng
user3240383

Respostas:

16

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 offmas em versões superiores (como 2.4.7) SSLProxyCheckPeerName offtambém é necessário especificar.

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

Você pode verificar a versão do Apache que possui :

apachectrl -V
ETL
fonte
Ei, eu tenho exatamente o mesmo problema, exceto que a configuração é um pouco diferente: As <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?
User157735
0

A adição abaixo resolveu o problema

SSLProxyProtocol +TLSv1
Murryy
fonte
5
Dar amostras de configurações místicas não é uma resposta de boa qualidade. Copiar e colar strings da Internet não é o que um administrador de sistemas profissional faz. Explique, o que faz e por quê.
peterh diz restabelecer Monica
deparei com isso com java12 - entre outras coisas, isso resolveu meu problema ....
womd 04/04
-2

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

nutria
fonte
3
Já ouviu falar de POODLE ? O SSLv3 deve estar desativado.
Sven
2
O SSLv3 é vulnerável
insider