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
quelle
Antworten:
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 off
muss sie jedoch ebenfalls angegeben werden.Apache-Dokumentation für
SSLProxyCheckPeerName
Die funktionierende Konfiguration sieht folgendermaßen aus:
Sie können die Version von Apache überprüfen, die Sie mit haben :
quelle
<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?Das Hinzufügen von unten löste das Problem
quelle
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
quelle