J'utilise un serveur apache (2.4) configuré comme équilibreur de charge devant 2 serveurs apache. Cela fonctionne très bien lorsque j'utilise des connexions http entre loadbalancer et backends, mais l'utilisation de https ne fonctionne pas. La configuration de l'équilibreur de charge:
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
<Proxy balancer://testcluster>
BalancerMember https://[Backend1]:443/test
BalancerMember https://[Backend2]:443/test
</Proxy>
ProxyPass /test balancer://testcluster
Les backends n'ont pour l'instant que des certificats auto-signés, c'est pourquoi la vérification des certificats est désactivée.
Le journal des erreurs sur l'équilibreur de charge contient les éléments suivants:
[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 page d'erreur du navigateur contient:
Proxy Error
The proxy server could not handle the request GET /test/test.jsp.
Reason: Error during SSL Handshake with remote server
Comme je l'ai déjà indiqué ci-dessus, la modification de la configuration vers le protocole http et le port 80 fonctionne. Les connexions https entre le client et l'équilibreur de charge fonctionnent également, de sorte que le module SSL de l'équilibreur de charge semble être correctement configuré. La connexion directe au backend via https ne génère également aucune erreur.
Merci d'avance pour votre temps
Edit: je l'ai compris, le problème est que le nom commun de mes certificats ne correspond pas au nom du serveur. Je pensais que SSLProxyVerify aucun ne ferait ignorer ce décalage, mais ce n'est pas le cas. Avant apache 2.4.5, cette vérification peut être désactivée en utilisant SSLProxyCheckPeerCN off mais sur les versions supérieures (j'utilise 2.4.7) SSLProxyCheckPeerName off doit également être spécifié.
Documentation Apache pour sslproxycheckpeername
La configuration de travail ressemble à ceci:
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
Malheureusement, je ne peux pas répondre à ma propre question par manque de réputation, j'ai donc édité ma question, j'espère que cela aidera toute personne qui rencontre un problème similaire
la source
Réponses:
Le problème s'est avéré être que le nom commun des certificats ne correspondait pas au nom du serveur.
Avant Apache 2.4.5, cette vérification peut être désactivée à l'aide de
SSLProxyCheckPeerCN off
mais sur les versions supérieures (telles que 2.4.7)SSLProxyCheckPeerName off
doit également être spécifiée.Documentation Apache pour
SSLProxyCheckPeerName
La configuration de travail ressemble à ceci:
Vous pouvez vérifier la version d'Apache que vous avez avec:
la source
<Location /margin-tool> ProxyPass https://xxxx.thoughtworks.net:8443/margin-tool ProxyPassReverse https://xxxx.thoughtworks.net:8443/margin-tool </Location>
mêmes paramètres ne fonctionnent pas. Des idées?L'ajout ci-dessous a résolu le problème
la source
j'utilise apache 2.4.9 et en ajoutant au httpd-ssl.conf le code suivant
SSLProxyProtocol + SSLv3 + TLSv1 + TLSv1.1
j'ai résolu les problèmes
la source