Estoy usando un servidor apache (2.4) configurado como equilibrador de carga frente a 2 servidores apache. Funciona bien cuando uso conexiones http entre loadbalancer y backends, sin embargo, usar https no funciona. La configuración del equilibrador de carga:
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
<Proxy balancer://testcluster>
BalancerMember https://[Backend1]:443/test
BalancerMember https://[Backend2]:443/test
</Proxy>
ProxyPass /test balancer://testcluster
Los backends solo tienen certificados autofirmados por ahora, por lo que la verificación del certificado está deshabilitada.
El registro de errores en el equilibrador de carga contiene lo siguiente:
[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 [...] ()
La página de error en el navegador contiene:
Proxy Error
The proxy server could not handle the request GET /test/test.jsp.
Reason: Error during SSL Handshake with remote server
Como ya dije anteriormente, cambiar la configuración al protocolo http y el puerto 80 funciona. También funcionan las conexiones https entre el cliente y el equilibrador de carga, por lo que el módulo ssl del equilibrador de carga parece estar configurado correctamente. Conectarse directamente al backend a través de https tampoco genera ningún error.
Gracias de antemano por tu tiempo
Editar: lo descubrí, el problema es que el nombre común de mis certificados no coincide con el nombre del servidor. Pensé que SSLProxyVerify none causaría que esta discrepancia sea ignorada, pero no lo hace. Antes de apache 2.4.5, esta verificación se puede desactivar con SSLProxyCheckPeerCN desactivado, pero en versiones superiores (estoy usando 2.4.7) SSLProxyCheckPeerName desactivado también debe especificarse.
Documentación de Apache para sslproxycheckpeername
La configuración de trabajo se ve así:
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
Desafortunadamente, no puedo responder mi propia pregunta por falta de reputación, así que edité mi pregunta, espero que esto ayude a cualquiera que tenga un problema similar
fuente
Respuestas:
El problema resultó ser que el nombre común de los certificados no coincidía con el nombre del servidor.
Antes de Apache 2.4.5, esta verificación se puede deshabilitar usando,
SSLProxyCheckPeerCN off
pero en versiones superiores (como 2.4.7)SSLProxyCheckPeerName off
también debe especificarse.Documentación de Apache para
SSLProxyCheckPeerName
La configuración de trabajo se ve así:
Puede verificar la versión de Apache que tiene con:
fuente
<Location /margin-tool> ProxyPass https://xxxx.thoughtworks.net:8443/margin-tool ProxyPassReverse https://xxxx.thoughtworks.net:8443/margin-tool </Location>
misma configuración no funciona. ¿Algunas ideas?Agregar a continuación resolvió el problema
fuente
uso apache 2.4.9 y agrego a httpd-ssl.conf el siguiente código
SSLProxyProtocol + SSLv3 + TLSv1 + TLSv1.1
he resuelto los problemas
fuente