Verwendung von HTTPs zwischen Apache Loadbalancer und Backends

30

Ich verwende einen Apache (2.4) Server, der als Loadbalancer vor 2 Apache Servern konfiguriert ist. Es funktioniert einwandfrei, wenn ich http-Verbindungen zwischen Loadbalancer und Backends verwende. Die Verwendung von https funktioniert jedoch nicht. Die Konfiguration des Loadbalancers:

SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
<Proxy balancer://testcluster>
  BalancerMember https://[Backend1]:443/test
  BalancerMember https://[Backend2]:443/test
</Proxy>
ProxyPass /test balancer://testcluster

Die Backends haben derzeit nur selbstsignierte Zertifikate, weshalb die Zertifikatsüberprüfung deaktiviert ist.

Das Fehlerprotokoll auf dem Loadbalancer enthält Folgendes:

[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 [...] ()

Die Fehlerseite im Browser enthält:

Proxy Error

The proxy server could not handle the request GET /test/test.jsp.
Reason: Error during SSL Handshake with remote server

Wie oben bereits erwähnt, funktioniert das Ändern der Konfiguration auf das http-Protokoll und den Port 80. Auch https-Verbindungen zwischen Client und Loadbalancer funktionieren, sodass das SSL-Modul des Loadbalancers ordnungsgemäß eingerichtet zu sein scheint. Die direkte Verbindung zum Backend über https führt ebenfalls zu keinen Fehlern.

Vielen Dank im Voraus für Ihre Zeit


Bearbeiten: Ich habe es herausgefunden, das Problem ist, dass der allgemeine Name meines Zertifikats nicht mit dem Servernamen übereinstimmt. Ich dachte, SSLProxyVerify none würde dazu führen, dass diese Nichtübereinstimmung ignoriert wird, aber dies ist nicht der Fall. Vor Apache 2.4.5 kann diese Prüfung mithilfe von SSLProxyCheckPeerCN deaktiviert werden. In höheren Versionen (ich verwende 2.4.7) muss SSLProxyCheckPeerName ebenfalls angegeben werden.

Apache-Dokumentation für sslproxycheckpeername

Die funktionierende Konfiguration sieht folgendermaßen aus:

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

Leider kann ich meine eigene Frage wegen mangelnder Reputation nicht beantworten, daher habe ich meine Frage bearbeitet. Ich hoffe, dies hilft jedem, der auf ein ähnliches Problem stößt

user3240383
quelle
Interessant. Ich habe dies mit apache2.2 gemacht und musste nie so SSLProxyVerify none und hatte nie Probleme mit Selbstsignierungszertifikaten. Sind Sie sicher, dass der Back-End-Server in Ordnung ist?
ETL
@ETL Ich weiß nicht, ob "SSLProxyVerify none" erforderlich ist oder nicht. Ich habe nur hinzugefügt, in der Hoffnung, dass dies das Problem beheben könnte. Durch Aufrufen von "wget ​​https: // [backend1] /test/test.jsp --no-check-certificate" auf dem Load-Balancer-Server wird die erwartete Datei heruntergeladen. ng
user3240383

Antworten:

16

Das Problem stellte sich heraus, dass der allgemeine Name des Zertifikats nicht mit dem Servernamen übereinstimmte.

Vor Apache 2.4.5 kann diese Prüfung mit deaktiviert werden SSLProxyCheckPeerCN off, bei höheren Versionen (z. B. 2.4.7) SSLProxyCheckPeerName offmuss sie jedoch ebenfalls angegeben werden.

Apache-Dokumentation für SSLProxyCheckPeerName

Die funktionierende Konfiguration sieht folgendermaßen aus:

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

Sie können die Version von Apache überprüfen, die Sie mit haben :

apachectrl -V
ETL
quelle
Hey, ich habe genau das gleiche Problem, außer dass die Konfiguration etwas anders ist: Die <Location /margin-tool> ProxyPass https://xxxx.thoughtworks.net:8443/margin-tool ProxyPassReverse https://xxxx.thoughtworks.net:8443/margin-tool </Location>gleichen Einstellungen funktionieren nicht. Irgendwelche Ideen?
user157735
0

Das Hinzufügen von unten löste das Problem

SSLProxyProtocol +TLSv1
Murryy
quelle
5
Es ist keine gute Antwort, mystische Konfigurationsbeispiele zu geben. Das Kopieren und Einfügen von Zeichenfolgen aus dem Internet ist nicht das, was ein professioneller Systemadministrator tut. Erklären Sie, was es macht und warum.
Peter sagt, Monica
bin mit java12 darauf gestoßen - dies hat unter anderem mein Problem gelöst ...
womd
-2

Ich benutze Apache 2.4.9 und füge der httpd-ssl.conf den folgenden Code hinzu

SSLProxyProtocol + SSLv3 + TLSv1 + TLSv1.1

Ich habe die Probleme gelöst

nutria
quelle
3
Schon mal was von POODLE gehört ? SSLv3 sollte deaktiviert sein.
Sven
2
SSLv3 ist anfällig
Insider