Configurazione SSL con apache davanti a Tomcat


9

Sto provando a configurare Apache con SSl e proxy SSL richieste alla mia istanza Tomcat. Penso di aver fatto funzionare SSL ma c'è ancora un errore che si presenta:

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

Reindirizzamento VH HTTP su 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>

Connettore 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"
/>

Il server Tomcat è configurato con un certificato autofirmato? Inoltre, se stai usando apache come frontend ssl per tomcat, perché stai usando ssl anche sul server tomcat? La migliore pratica è fare in modo che tomcat risponda a http e scarichi https sul server apache.
Krist van Besien,

Risposte:


14

Quando si esegue il proxy di http o https su https, è necessario configurare apache come client ssl . Dopotutto, quando Apache parla con il tuo server Tomcat, funziona come un client Web. Tuttavia, Apache di solito non funzionerà come client SSL.

In primo luogo, suggerirei di considerare prima se hai davvero bisogno di questo, perché lo stai facendo. La pratica comune quando Tomcat e Apache vivono sullo stesso server è che Tomcat serva semplicemente http (o ajp) e scarichi ssl sul server Apache. Di solito non è necessario avere ssl tra il server apache e tomcat. Non avere SSL sul server Tomcat ti farà risparmiare un sacco di problemi.

Tutto ciò che devi fare è, ad esempio, definire un connettore HTTP sulla porta 8080 nell'istanza di Tomcat e reindirizzare tutte le richieste lì dall'host virtuale 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>

Ma se decidi ancora di aver bisogno del proxy da SSL a SSL dovrai aggiungere ulteriori modifiche. Apache deve essere in grado di funzionare come client SSL, oltre che come server SSL. Quando Apache parla con un altro server usando https, dopo tutto assume il ruolo di client. Non è così facile e ci sono molti problemi in cui puoi imbatterti. Dovrai aggiungere questo:

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

Quindi in questo percorso è necessario inserire il certificato CA utilizzato per firmare il certificato utilizzato dal server con cui si comunica. Se si utilizza un certificato "autofirmato", è necessario inserirlo in questa directory.

Una volta fatto ciò, devi eseguire "c_rehash" in quella directory. c_rehash fa parte di una distribuzione openssl standard. c_rehash crea alias con hash in questa directory. Apache ha bisogno di questi.

Per verificare se tutto è lì puoi fare quanto segue:

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

se la connessione ha esito positivo, verrà visualizzato un messaggio in cui è possibile digitare una richiesta. Prova qualcosa.

 GET /

e vedi se ottieni qualcosa. Se questo test ha esito positivo, dovrebbe funzionare anche Apache.

È ora possibile aggiungere le istruzioni ReWriteRule o Proxy per inoltrare le connessioni al server https.


Sono davvero nuovo a questo ... come posso usare Apache solo per SSL e reindirizzare solo con http?
SaifDeen

sembra più facile per me .. voglio solo ssl per il front-end ...
SaifDeen

Se vuoi semplicemente usare apache come front-end ssl per Tomcat, tutto ciò che devi fare è configurare un connettore http o ajp sul tuo server tomcat e avere richieste di inoltro di apache.
Krist van Besien,

lo proverò lunedì!
SaifDeen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.