Fehler beim SSL-Handshake mit dem Remote-Server


118

Ich habe Apache2(hört auf 443) und eine Web-App läuft auf Tomcat7(hört auf 8443) auf Ubuntu.

Ich habe Apache2 als Reverse-Proxy festgelegt, damit ich über Port 443 anstelle von 8443 auf die Web-App zugreifen kann. Außerdem muss die SSL-Kommunikation nicht nur zwischen Browser und Apache2, sondern auch zwischen Apache2 und Tomcat7 erfolgen. Daher habe ich SSL sowohl für Apache2 als auch für Tomcat7 festgelegt . Wenn ich versuche, auf die Web-App zuzugreifen, indem ich mich direkt an tomcat7 wende, ist alles in Ordnung. Das Problem ist, dass beim Versuch, über apache2 (Reverse Proxy) auf die Web-App des Tomcat zuzugreifen, im Browser der folgende Fehler angezeigt wird:

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

Apache erfüllt das auf dem Tomcat installierte Zertifikat nicht. Ist es ein selbstsigniertes Zertifikat? Oder wird es von einer hauseigenen Zertifizierungsstelle hergestellt?
MK.

2
Es ist selbst signiert mit diesem Befehl: openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
user2791481

3
serverfault.com/questions/356678/… Ich denke, das ist, was Sie wollen: SSLProxyVerify keine SSLProxyCheckPeerCN aus
MK.

9
Besser Satz SSLProxyCACertificateFilezu Ihrem privaten CA Certicate, anstatt sich direkt an der Überprüfung.
ndbroadbent

Wie in diesem Blog erläutert , können Sie die SSL-Prüfungen deaktivieren.
HybrisHelp

Antworten:


265

Der Kommentar von MK hat mich in die richtige Richtung gelenkt.

Ab Apache 2.4 gibt es unterschiedliche Standardeinstellungen und eine neue Direktive.

Ich verwende Apache 2.4.6 und musste die folgenden Anweisungen hinzufügen, damit es funktioniert:

SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off

Das schaltet also den Schutz aus, aber solange der Verkehr lokal ist (dh 127.0.0.1:8443 ), sollte es weniger problematisch sein, oder?
bgStack15

5
Nun, es schaltet den Schutz nicht aus, da es sich um Verschlüsselung handelt. Der Verkehr ist immer noch verschlüsselt. Dadurch wird nur die Überprüfung des Zertifikats deaktiviert, um sicherzustellen, dass es von einer vertrauenswürdigen Stelle stammt. Wenn Sie dem Server vertrauen, sollten Sie kein Problem haben. Aber ja, für den lokalen Verkehr denke ich, dass es Ihnen auch gut geht.
Mydoghaswürmer

1
Danke mydoghasworms. Ihre Anweisungen funktionieren in Serverversion: Apache / 2.4.6. Wenn jemand die Version von httpd kennen muss, verwenden Sie diese: httpd -V
JRichardsz

3

Ich habe 2 Server auf Docker, Reverse Proxy und Webserver eingerichtet. Dieser Fehler trat plötzlich nach 1 Jahr für alle meine Websites auf. Bei der vorherigen Einrichtung habe ich ein selbstsigniertes Zertifikat auf dem Webserver generiert.

Also musste ich das SSL-Zertifikat erneut generieren und es fing an zu funktionieren ...

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ssl.key -out ssl.crt


1

Konnte das gleiche Problem wie OP:

  • Tomcat gab eine Antwort zurück, wenn direkt über die SOAP-Benutzeroberfläche zugegriffen wurde
  • HTML-Dateien wurden nicht geladen
  • Bei Verwendung der in der vorherigen Antwort erwähnten Apache-Eigenschaften wurde eine Webseite angezeigt, aber AngularJS konnte keine HTTP-Antwort erhalten

Das Tomcat-SSL-Zertifikat ist abgelaufen, während ein Browser es als sicher anzeigt. Das Apache-Zertifikat ist noch lange nicht abgelaufen. Das Aktualisieren der Tomcat KeyStore-Datei hat das Problem behoben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.