Benötigen Sie Hilfe bei der Fehlerbehebung? Https-Webserver-Fehler - SSL-Handshake fehlgeschlagen

9

Ich habe diese Anleitung befolgt: http://hints.macworld.com/article.php?story=20041129143420344

Hier ist meine Definition des virtuellen Hosts

<VirtualHost *:443>
    SSLEngine on
    SSLProxyEngine On
    RequestHeader set Front-End-Https "On"
    CacheDisable *
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    DocumentRoot "/Users/me/projects/myproject/public"
    ServerName ssl.mydomain.com
    ServerAlias *.ssl.mydomain.com
    SSLCertificateKeyFile "/private/etc/apache2/certs/webserver.nopass.key"
    SSLCertificateFile "/private/etc/apache2/certs/newcert.pem"
    SSLCACertificateFile "/private/etc/apache2/certs/demoCA/cacert.pem"
    SSLCARevocationPath "/private/etc/apache2/certs/demoCA/crl"
    ErrorLog "/Users/me/Desktop/ssl.log"

    ProxyPass / https://localhost:3002/
    ProxyPassReverse / https://localhost:3002
    ProxyPreserveHost on    
</VirtualHost>

Und wenn ich versuche, eine Verbindung mit dem Webbrowser herzustellen, wird folgende Fehlermeldung angezeigt:

[Thu Feb 02 16:50:40 2012] [error] (502)Unknown error: 502: proxy: pass request body failed to 127.0.0.1:3002 (localhost)
[Thu Feb 02 16:50:40 2012] [error] [client 96.11.81.39] proxy: Error during SSL Handshake with remote server returned by /session/new
[Thu Feb 02 16:50:40 2012] [error] proxy: pass request body failed to 127.0.0.1:3002 (localhost) from 96.11.81.39 ()

Wie debugge / behebe ich das?

NullVoxPopuli
quelle

Antworten:

12

Um die Antwort von vbartoni zu ergänzen, scheint es ab Apache 2.4 verschiedene Standardeinstellungen und eine neue Direktive zu geben.

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

SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
Mydoghaswürmer
quelle
1
Das macht den Job - nur mit all diesen Anweisungen wird es sich nicht beschweren.
Michael Böckling
@ MichaelBöckling Danke das hat mich aufgehalten. Ich möchte ausdrücklich darauf hinweisen, dass in der Dokumentation angegeben ist, dass es SSLProxyCheckPeerNameersetzt, SSLProxyCheckPeerCNaber es wird nicht funktionieren, wenn Sie nicht alle Anweisungen angeben .
Dualed
3

Machen Sie sich keine Gedanken über HTTPS zwischen Ihrem Front-End- und Ihrem Back-End-Server. Es macht wenig Sinn, SSL für eine localhostVerbindung zu aktivieren .

Verwenden Sie zur Verdeutlichung ProxyPass / http://localhost:3002/anstelle vonProxyPass / https://localhost:3002/


Wenn Sie Ihren Reverse-Proxy wirklich auch über SSL mit dem Back-End-Server verbinden möchten (meistens nützlich, wenn sich auf diesem Server nicht der Apache-HTTPD-Reverse-Proxy befindet), verwenden Sie zusätzlich https://backend-server-addressdie SSLProxy*Anweisungen, um den einzurichten CA-Zertifikate, wie in der Einführung zur mod_proxyDokumentation dokumentiert . Insbesondere müssten Sie konfigurieren SSLProxyCACertificateFileund sicherstellen, dass das Zertifikat des Backend-Servers für den richtigen Hostnamen ausgestellt wird, wie von Apache Httpd gesehen (dh localhostin Ihrem Fall).


Wenn Sie keine Verbindung zu Ihrem Back-End-Server über SSL herstellen, wird möglicherweise nicht erkannt, dass Sie tatsächlich SSL verwenden, und es ist so konfiguriert, dass Sie gezwungen sind, zu SSL zu wechseln (daher die unendlichen Weiterleitungen). Möglicherweise möchten Sie ähnliche Mechanismen wie Jetty mit seiner forwardedOption betrachten (um dem Back-End mitteilen zu können, dass es sich hinter einem Proxy befindet). Rails kann dies möglicherweise X-Forwarded-Protostandardmäßig interpretieren . Fügen Sie in diesem Fall Folgendes zu Ihrer Apache-Konfiguration hinzu (auf dem virtuellen SSL-Host):

RequestHeader set X-Forwarded-Proto 'https'

Es scheint zum Beispiel ein ähnliches Problem zu geben, das hier diskutiert wird.

Bruno
quelle
SSLProxy wird auf diesem Link nur einmal erwähnt. Keine Beispiele für die Verwendung. Ich habe den Anforderungsheader so geändert, dass X-Forwarded-Proto 'https' gesetzt wird ... aber es funktioniert immer noch nicht / ich erhalte den gleichen Fehler. Zu localhost gehen: 3002 gibt auch den gleichen Fehler
NullVoxPopuli
Es gibt gültige Gründe für die Verbindung zu https mit localhost: Beispiel socket.io in einem HTTPS-Backend. Es wird durch Fehler mit gemischtem Inhalt.
Florestan06
3

Ich hatte ein ähnliches Problem (dieselben Fehlerprotokolle), außer dass der Proxy den https-Verkehr an einen anderen Host weiterleitete.
Da ich faul war und die Hosts in meinem eigenen isolierten Netzwerk sind, haben diese Anweisungen das Problem gelöst:

SSLProxyVerify keine
SSLProxyCheckPeerCN aus

vbartoni
quelle
1

Wenn der Backend-Server ein veraltetes selbstsigniertes Zertifikat verwendet, ist eine weitere Option erforderlich (wenn kein Zugriff auf den Backend-Server besteht):

SSLProxyCheckPeerExpire aus

Milan Kerslager
quelle