SSL-Setup mit Apache vor Tomcat

9

Ich versuche, Apache mit SSl- und Proxy-SSL-Anforderungen an meine Tomcat-Instanz einzurichten. Ich glaube, ich habe das SSL zum Laufen gebracht, aber es gibt immer noch einen Fehler, der auftaucht:

Bad Gateway

The proxy server received an invalid response from an upstream server.

* SSL Virtualhost *

LoadModule ssl_module modules/mod_ssl.so

Listen 443
<VirtualHost _default_:443>
SSLEngine On
SSLProxyEngine On
DocumentRoot "/var/apache-tomcat-7.0.34/webapps/Learn2Gether/"

SSLCertificateFile /etc/pki/tls/learn2gether/cert-6090205098829887.pem
SSLCertificateKeyFile /etc/pki/tls/learn2gether/private_key_unlocked.pem
SSLCertificateChainFile /etc/pki/tls/learn2gether/rubca-chain.pem


BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

ServerName www.learn2gether.rubel.rub.de
ServerAlias learn2gether.rubel.rub.de

#RewriteRule ^\/$ /Learn2Gether/index.html [PT]
##RewriteRule ^/(.*)$ /$1 [PT]

ProxyRequests Off
ProxyPreserveHost On
ProxyPass / https://localhost:8443/
ProxyPassReverse / https://localhost:8443/

</VirtualHost>
~               

HTTP VH-Umleitung zu HTTPS

NameVirtualHost *:80

<VirtualHost _default_:80>
   ServerName www.learn2gether.rubel.rub.de
   ServerAlias learn2gether.rubel.ruhr-uni-bochum.de
RewriteEngine on
# DocumentRoot "/var/apache-tomcat-7.0.34/webapps/Learn2Gether/"
RewriteCond %{HTTP_HOST} !^learn2gether.rubel.ruhr-uni-bochum\.de [NC]
RewriteRule ^/(.*)$ http://learn2gether.rubel.ruhr-uni-bochum.de/$1 [R=301,L]

RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_HOST}$1 [L]

#RewriteRule ^\/$ /Learn2Gether/index.html [PT]
#RewriteRule ^/(.*)$ /$1 [PT]

#ProxyPass / https://localhost:8443/
#ProxyPassReverse / https://localhost:8443/
</VirtualHost>

Tomcats Apache-Anschluss

    <Connector port="8443"
  protocol="HTTP/1.1"
   connectionTimeout="20000"
    compression="on"
     compressionMinSize="32"
      noCompressionUserAgents="gozilla, traviata"
       compressableMimeType="text/html,text/xml,text/javascript,application/x-javascript,text/css"
        redirectPort="8443"
         URIEncoding="UTF-8"
          proxyPort="443"
           proxyName="learn2gether.rubel.ruhr-uni-bochum.de"
            scheme="https"
             secure="true"
/>
SaifDeen
quelle
Ist der Tomcat-Server mit einem selbstsignierten Zertifikat konfiguriert? Wenn Sie Apache als SSL-Frontend für Tomcat verwenden, warum verwenden Sie SSL auch auf dem Tomcat-Server? Es wird empfohlen, dass Ihr Tomcat nur auf http reagiert und https auf den Apache-Server auslagert.
Krist van Besien

Antworten:

14

Wenn Sie http oder https an https weitergeben, müssen Sie Apache als SSL- Client konfigurieren . Wenn Apache mit Ihrem Tomcat-Server kommuniziert, fungiert er schließlich als Webclient. Apache funktioniert jedoch normalerweise nicht sofort als SSL-Client.

Zunächst würde ich vorschlagen, dass Sie zuerst überlegen, ob Sie dies wirklich brauchen, warum Sie dies tun. Die übliche Praxis, wenn Tomcat und Apache auf demselben Server leben, besteht darin, dass Tomcat nur einfaches http (oder Ajp) bereitstellt und SSL auf den Apache-Server auslagert. Es ist normalerweise nicht erforderlich, SSL zwischen dem Apache- und dem Tomcat-Server zu haben. Wenn Sie keine SSL auf dem Tomcat-Server haben, sparen Sie sich viel Ärger.

Sie müssen lediglich einen HTTP-Connector an Port 8080 in Ihrer Tomcat-Instanz definieren und alle Anforderungen von Ihrem virtuellen Apache-SSL-Host aus umleiten:

<VirtualHost _default_:443>
SSLEngine On

SSLCertificateFile /etc/pki/tls/learn2gether/cert-6090205098829887.pem
SSLCertificateKeyFile /etc/pki/tls/learn2gether/private_key_unlocked.pem
SSLCertificateChainFile /etc/pki/tls/learn2gether/rubca-chain.pem


BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

ServerName www.learn2gether.rubel.rub.de
ServerAlias learn2gether.rubel.rub.de

ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/

</VirtualHost>

Wenn Sie jedoch weiterhin entscheiden, dass Sie SSL zu SSL-Proxy benötigen, müssen Sie weitere Änderungen hinzufügen. Apache muss sowohl als SSL-Client als auch als SSL-Server fungieren können. Wenn Apache über https mit einem anderen Server kommuniziert, übernimmt es schließlich die Rolle des Clients. Das ist nicht so einfach und es gibt viele Probleme, auf die Sie stoßen können. Sie müssen Folgendes hinzufügen:

# turn on SSL proxying.
SSLProxyEngine On

# to tell Apache where to find CA certificates to check server certificates with:
# (You can choose yourself where you put these certificates)
SSLProxyCACertificatePath /path/to/ca/certificates.

In diesen Pfad müssen Sie dann das CA-Zertifikat einfügen, mit dem das Zertifikat signiert wird, das von dem Server verwendet wird, mit dem Sie kommunizieren. Wenn Sie ein "selbstsigniertes" Zertifikat verwenden, müssen Sie es in dieses Verzeichnis stellen.

Sobald Sie dies getan haben, müssen Sie "c_rehash" in diesem Verzeichnis ausführen. c_rehash ist Teil einer Standard-OpenSL-Distribution. c_rehash erstellt in diesem Verzeichnis Hash-Aliase. Apache braucht diese.

Um zu testen, ob alles vorhanden ist, können Sie Folgendes tun:

 openssl s_client -CApath /path/to/ca/certificates -connect remoteserver:8443

Wenn die Verbindung erfolgreich ist, erhalten Sie eine Eingabeaufforderung, in die Sie eine Anfrage eingeben können. Probieren Sie einfach etwas aus.

 GET /

und sehen, ob Sie etwas bekommen. Wenn dieser Test erfolgreich ist, sollte auch Apache funktionieren.

Sie können jetzt die Anweisungen ReWriteRule oder Proxy hinzufügen, um die Verbindungen an Ihren https-Server weiterzuleiten.

Krist van Besien
quelle
Ich bin wirklich neu in dem .. Wie kann ich Apache nur für SSL verwenden und nur mit http umleiten?
SaifDeen
klingt für mich einfacher .. ich will nur ssl für das Frontend ...
SaifDeen
Wenn Sie Apache nur als SSL-Frontend für Tomcat verwenden möchten, müssen Sie lediglich einen http- oder Ajp-Connector auf Ihrem Tomcat-Server konfigurieren und Apache-Weiterleitungsanforderungen an diesen senden.
Krist van Besien
Ich werde das am Montag ausprobieren!
SaifDeen