Utilisation de Https entre Apache Loadbalancer et les backends

30

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

user3240383
la source
Intéressant. J'avais l'habitude de le faire avec apache2.2 et je n'ai jamais eu à le faire, donc SSLProxyVerify aucun et je n'ai jamais eu de problème avec les certificats d'auto-signature. Vous êtes sûr que le serveur principal fonctionne bien.?
ETL
@ETL Je ne sais pas si "SSLProxyVerify none" est requis ou non, je viens d'ajouter que dans l'espoir que cela pourrait résoudre le problème. L'appel à "wget ​​https: // [backend1] /test/test.jsp --no-check-certificate" sur le serveur d'équilibrage de charge télécharge le fichier attendu. ng
user3240383

Réponses:

16

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 offmais sur les versions supérieures (telles que 2.4.7) SSLProxyCheckPeerName offdoit également être spécifiée.

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

Vous pouvez vérifier la version d'Apache que vous avez avec:

apachectrl -V
ETL
la source
Hé, j'ai exactement le même problème, sauf que la configuration est peu différente: les <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?
user157735
0

L'ajout ci-dessous a résolu le problème

SSLProxyProtocol +TLSv1
Murryy
la source
5
Donner des échantillons de configuration mystiques n'est pas une réponse de bonne qualité. Copier-coller des chaînes depuis Internet n'est pas ce qu'un administrateur système professionnel fait. Expliquez-le, ce qu'il fait et pourquoi.
Peterh dit de réintégrer Monica
a rencontré cela avec java12 - entre autres, cela a résolu mon problème ....
womd
-2

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

ragondin
la source
3
Avez-vous déjà entendu parler de POODLE ? SSLv3 doit être désactivé.
Sven
2
SSLv3 est vulnérable
initié