Configuración SSL con apache delante de tomcat

9

Estoy tratando de configurar Apache con SSl y solicitudes SSL proxy para mi instancia de Tomcat. Creo que hice que el SSL funcione pero todavía hay un error que aparece:

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

Conector 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
fuente
¿El servidor Tomcat está configurado con un certificado autofirmado? Además, si está usando apache como una interfaz SSL para Tomcat, ¿por qué está usando SSL también en el servidor Tomcat? La mejor práctica es hacer que su tomcat responda a http y descargue https al servidor apache.
Krist van Besien

Respuestas:

14

Al enviar http o https a https, debe configurar apache como un cliente ssl . Cuando apache habla con su servidor Tomcat, funciona como un cliente web después de todo. Sin embargo, Apache generalmente no funcionará como un cliente SSL listo para usar.

En primer lugar, te sugiero que primero consideres si realmente necesitas esto, por qué lo estás haciendo. La práctica común cuando Tomcat y Apache viven en el mismo servidor es hacer que Tomcat solo sirva http (o ajp) simple y descargue ssl en el servidor Apache. Por lo general, no es necesario tener SSL entre el servidor apache y el servidor tomcat. No tener ssl en el servidor tomcat te ahorrará muchos problemas.

Todo lo que necesita hacer es, por ejemplo, definir un conector HTTP en el puerto 8080 en su instancia de tomcat, y redirigir todas las solicitudes desde su host virtual 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>

Pero si todavía decide que necesita proxy SSL a SSL, deberá agregar más cambios. Apache necesita poder funcionar como un cliente SSL, así como un servidor SSL. Cuando Apache habla con otro servidor usando https, después de todo, toma el rol de cliente. Esto no es tan fácil, y hay muchos problemas con los que puedes enfrentarte. Deberá agregar esto:

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

Luego, en esta ruta, debe colocar el certificado de CA utilizado para firmar el certificado utilizado por el servidor con el que se comunica. Si utiliza un certificado "autofirmado", deberá colocarlo en este directorio.

Una vez que haya hecho eso, debe ejecutar "c_rehash" en ese directorio. c_rehash es parte de una distribución estándar de openssl. c_rehash crea alias hash en este directorio. Apache los necesita.

Para probar si todo está allí, puede hacer lo siguiente:

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

Si la conexión se realiza correctamente, recibirá un mensaje donde puede escribir una solicitud. Solo intenta algo.

 GET /

y mira si consigues algo. Si esta prueba es exitosa, apache también debería funcionar.

Ahora puede agregar las declaraciones ReWriteRule o Proxy para reenviar las conexiones a su servidor https.

Krist van Besien
fuente
soy realmente nuevo en eso ... ¿cómo puedo usar apache solo para ssl y redirigir solo con http?
SaifDeen
sonidos más fácil para mí .. i sólo quieren SSL para la parte delantera ...
SaifDeen
Si solo quiere usar Apache como interfaz SSL para Tomcat, todo lo que tiene que hacer es configurar un conector http o ajp en su servidor Tomcat, y tener solicitudes de reenvío de Apache.
Krist van Besien
¡Lo intentaré el lunes!
SaifDeen