web-dev-qa-db-fra.com

SSL Configuration avec Apache devant Tomcat

j'essaie de configurer Apache avec SSL et des demandes SSL proxy à 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>
~               

HTTP VH Redirect à 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"
/>
9
SaifDeen

Lorsque vous proxyez http ou https sur https, vous devez configurer Apache en tant que SSL Client. Lorsque Apache parle à votre serveur Tomcat, il fonctionne comme un client Web après tout. Cependant, Apache ne fonctionnera généralement pas en tant que client SSL hors de la boîte.

Tout d'abord, je vous suggérerais que vous considériez d'abord si vous avez vraiment besoin de cela, pourquoi vous faites cela. La pratique courante lorsque Tomcat et Apache en direct sur le même serveur sont de servir à Tomcat servir simplement de servir la nature HTTP (ou AJP) et de décharger 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 vous sauvera beaucoup de problèmes.

Tout ce que vous avez à faire est par exemple de définir un connecteur http sur le port 8080 dans votre instance Tomcat et redirige toutes les demandes de votre hôte virtuel Apache SSL:

<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 ayez besoin de SSL vers la proxy de SSL, vous devrez ajouter plus de modifications. Apache doit pouvoir fonctionner comme client SSL, ainsi que SSL Server. Lorsque Apache parle à un autre serveur à l'aide de HTTPS, c'est après tout, prenant le rôle de client. Ce n'est pas si facile, et il y a beaucoup de problèmes à courir. 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 que vous communiquez avec. Si vous utilisez un certificat "auto-signé", vous devrez le mettre dans ce dir.

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

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

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

si le CONNENCTION réussit, vous obtiendrez une invite où vous pouvez taper dans une demande. Juste essayer quelque chose.

 GET /

et voyez si vous obtenez quelque chose. Si ce test est réussi Apache devrait fonctionner aussi.

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

14