Apache und Golang (oder nodejs oder springboot usw.) mit SSLPROXYpass und HTTP2

Apache und Golang (oder nodejs oder springboot usw.) mit SSLPROXYpass und HTTP2

meine Frage betrifft "Sicherheit" Ich nehme an, dass diese Frage auch für nodejs oder springboot oder was auch immer auf einem anderen Port mit Apache als primärem Server läuft gilt

Ich probiere ein paar Sachen mit der Golang-App und http2/push

http2 braucht https

meine Golang-App ist eingeschaltethttps://127.0.0.1:7072/ und http2 funktioniert gut darauf

nach langem Suchen ist hier mein virtueller Host (lokaler WAMP, alle Proxy-Module und http2 geladen), der FUNKTIONIERT, ABER:

<VirtualHost mygolang:443>

DocumentRoot "c:/wamp64/www"
ServerName mygolang:443
ServerAdmin [email protected]
ErrorLog "c:/wamp64/bin/apache/apache2.4.27/logs/ssl_error.log"
TransferLog "c:/wamp64/bin/apache/apache2.4.27/logs/access.log"


SSLEngine on
SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off


SSLCertificateFile "C:\wamp64\bin\apache\apache2.4.27\conf\cert\certificate.crt"
SSLCertificateKeyFile "C:\wamp64\bin\apache\apache2.4.27\conf\key/private.key"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "c:/wamp64/www">
    SSLOptions +StdEnvVars
</Directory>


BrowserMatch "MSIE [2-5]" \
     nokeepalive ssl-unclean-shutdown \
     downgrade-1.0 force-response-1.0

CustomLog "C:\wamp64\bin\apache\apache2.4.27\logs\ssl_request.log" \
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

ProxyRequests On
ProxyPreserveHost On
ProxyVia full
<proxy>
    Order deny,allow
    Allow from all
  </proxy>

  ProxyPass        /  https://127.0.0.1:7072/
  ProxyPassReverse /  https://127.0.0.1:7072/
</VirtualHost> 

ABER meine Sicherheitsfrage betrifft

SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off

wenn ich es entferne, erscheint eine 500 im Browser:

Proxy Error
The proxy server could not handle the request GET /.

Reason: Error during SSL Handshake with remote server

Apache/2.4.27 (Win64) OpenSSL/1.1.0f PHP/7.1.9 Server at mygolang Port 443

Also, was denken Sie? Ist das Entfernen des SSL-Checks ein Problem? Ist es eine weitere elegante Lösung für „Ich habe Apache und möchte eine vollständige Umleitung, aber die Domain auf einem Konto auf http2 beibehalten?“

Antwort1

ProxyPass        /  https://127.0.0.1

Es besteht absolut keine Notwendigkeit und wenig Nutzen für die Verwendung von TLS für die Verbindung zurück zulokaler HostTLS
bietet Transportsicherheit, um das Abhören der Kommunikation zu verhindernzwischenSysteme und zur Bereitstellung einer (gegenseitigen) Authentifizierung. Beides ist für Datenverkehr, der das System nicht verlässt, nicht erforderlich.

Außerdem: Soweit ich weiß, weder Apache 2.4 nochnginxunterstützt sogar HTTP/2 auf ProxyPass-Reverse-Proxy-Verbindungen.

HTTP/2 erfordert TLS, aber die Vorteile bestehen hauptsächlich in der Verbindung zwischen Client und Server, nicht so sehr bei LAN-Verbindungen mit geringer Latenz oder FastCGI/ProxyPass-Verbindungen innerhalb des Systems selbst. Normalerweise reicht es aus, HTTP/2 auf Ihrem Front-End zu beenden und in HTTP/1.1 mit Ihren Back-Ends zu kommunizieren.

Hinweis: Apache httpd Version 2.5 hatExperimental-Unterstützung für HTTP/2https://httpd.apache.org/docs/trunk/mod/mod_proxy_http2.html

HTTP/2 (TLS)

ProxyPass "/app" "h2://app.example.com"
ProxyPassReverse "/app" "https://app.example.com"

HTTP/2 (Klartext)

ProxyPass "/app" "h2c://app.example.com"
ProxyPassReverse "/app" "http://app.example.com"

Antwort2

Ein paar Dinge sind der Antwort von @HBruijn hinzuzufügen.

Sie verwenden einen Proxy für eine IP-Adresse:

ProxyPass        /  https://127.0.0.1:7072/
ProxyPassReverse /  https://127.0.0.1:7072/

Es kommt selten vor (aber nicht unmöglich), dass ein Zertifikat eine IP-Adresse enthält. Aus diesem Grund erhalten Sie einen Zertifikatsfehler und müssen die Fehlerprüfungen entfernen, damit dies funktioniert.

Ich stimme @HBruijn voll und ganz zu, dass die Verwendung von HTTPS für die Proxy-Pass-Verbindung – insbesondere, wenn sie sich auf dem lokalen Host befindet – unnötig ist.

Darüber hinaus erfolgt diese Verbindung über HTTP/1.1, da das httpsmod_proxy_http-Protokoll verwendet wird. Apache (2,5/Stamm Und 2.4) erlaubt Proxy Pass über HTTP/2, indem es mit ( h2) oder mit HTTPS ( h2c) verwendet wird. HTTP/2 benötigt kein HTTPS - nur bei Verwendung mit dem Browser ist dies erforderlich. Es kann also ohne HTTPS für Proxy-Pass-Verbindungen verwendet werden. Allerdings können auch h2 und h2c dannHTTP/2-Push bei Proxy-Verbindungen nicht zulassenes bringt also nicht viel, dies überhaupt zu verwenden (insbesondere, da es immer noch als experimentell gekennzeichnet ist). Die empfohlene Methode zum Pushen vom Backend ist die Verwendung von Link-HTTP-Headern – was auch über HTTP/1.1-Verbindungen möglich ist.

Zusammenfassend lässt sich also sagen: Stellen Sie einfach eine Verbindung über HTTP/1.1 ohne HTTPS her, damit Sie diese Überprüfungen nicht deaktivieren müssen. Sie können weiterhin mithilfe von Link-Headern vom Back-End-Server pushen.

verwandte Informationen