Configuration SSL avec apache devant tomcat

9

im essayant de configurer Apache avec SSl et les requêtes SSL proxy sur mon instance tomcat. Je pense que j'ai fait le travail SSL mais il y a toujours une erreur qui apparaît:

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>
~               

Redirection HTTP VH vers 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>

Connecteur Apache Tomcats

    <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
la source
Le serveur tomcat est-il configuré avec un certificat auto-signé? De plus, si vous utilisez apache comme interface SSL pour Tomcat, pourquoi utilisez-vous également SSL sur le serveur Tomcat? La meilleure pratique consiste à simplement faire répondre votre tomcat à http et à décharger https sur le serveur apache.
Krist van Besien

Réponses:

14

Lors du proxy de http ou https vers https, vous devez configurer apache en tant que client SSL . Apache parle à votre serveur Tomcat, il fonctionne après tout comme un client Web. Cependant Apache ne fonctionnera généralement pas comme un client SSL prêt à l'emploi.

Premièrement, je vous suggère de considérer d'abord si vous en avez vraiment besoin, pourquoi vous le faites. La pratique courante lorsque Tomcat et Apache vivent sur le même serveur consiste à faire en sorte que Tomcat serve simplement http (ou ajp) et décharge ssl sur le serveur Apache. Il n'est généralement pas nécessaire d'avoir SSL entre le serveur Apache et Tomcat. Ne pas avoir ssl sur le serveur tomcat va vous éviter bien des ennuis.

Tout ce que vous devez faire est par exemple de définir un connecteur HTTP sur le port 8080 dans votre instance tomcat, et de rediriger toutes les demandes à partir de votre hôte virtuel SSL apache:

<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>

Mais si vous décidez toujours que vous avez besoin de proxy SSL à SSL, vous devrez ajouter d'autres modifications. Apache doit pouvoir fonctionner en tant que client SSL, ainsi que serveur SSL. Quand Apache parle à un autre serveur en utilisant https, c'est après tout en jouant le rôle de client. Ce n'est pas si simple, et vous pouvez rencontrer de nombreux problèmes. Vous devrez ajouter ceci:

# 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.

Ensuite, dans ce chemin, vous devez mettre le certificat CA utilisé pour signer le certificat utilisé par le serveur avec lequel vous communiquez. Si vous utilisez un certificat "auto signé", vous devrez le mettre dans ce répertoire.

Une fois que vous avez fait cela, vous devez exécuter "c_rehash" dans ce répertoire. c_rehash fait partie d'une distribution openssl standard. c_rehash crée des alias hachés dans ce répertoire. Apache en a besoin.

Pour tester si tout est là, vous pouvez faire ce qui suit:

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

si la connexion réussit, vous obtiendrez une invite vous permettant de taper une demande. Essayez quelque chose.

 GET /

et voyez si vous obtenez quelque chose. Si ce test réussit, apache devrait aussi fonctionner.

Vous pouvez maintenant ajouter les instructions ReWriteRule ou Proxy pour transférer les connexions à votre serveur https.

Krist van Besien
la source
im vraiment nouveau à cela .. comment puis-je utiliser apache juste pour ssl et rediriger juste avec http?
SaifDeen
ça me semble plus facile .. je veux juste du ssl pour le front end ...
SaifDeen
Si vous souhaitez simplement utiliser apache comme interface SSL pour Tomcat, tout ce que vous avez à faire est de configurer un connecteur http ou ajp sur votre serveur tomcat et de lui envoyer des demandes de transfert apache.
Krist van Besien
mal essayer ça lundi!
SaifDeen