2012-04-06 22 views
9

He estado buscando por todas partes, pero no puedo encontrar una solución clara para la siguiente situación:Tomcat detrás de Apache y SSL

Tenemos una aplicación web (Grails + Spring Security) que se ejecuta en Tomcat, Apache detrás. La parte de la aplicación necesita ejecutarse en https, por lo tanto, si utiliza Spring Security Channel Security, cada vez que navegue a una parte de la aplicación que sea segura, Spring lo redirigirá a https con un código de estado 302.

Ahora, tomcat está configurado para conocer los https y certificados, por lo que sabe cómo manejar el ssl. De hecho, cuando apache de lado yendo directamente a la url y al puerto para atacar a tomcat directamente, todo funciona al 100%.

El problema ahora se presenta al poner apache delante de tomcat. La configuración de Apache que tenemos en este momento funciona bien para las partes no seguras de la aplicación. Estamos utilizando mod_jk para proxy apache y tomcat.

Sin embargo, tan pronto como se intenta ir a una parte segura de la aplicación, la primavera volverá a dirigir usted, que llegará a la parte

<VirtualHost _default_:443> ... </VirtualHost> 

de la configuración de Apache ... y aquí es donde la el problema comienza

Por lo que he leído, es posible que apache, a través de mod_jk, pase el manejo del ssl a tomcat. Pero parece que no podemos obtener la configuración correcta para esto. Como tomcat ya está configurado para el ssl, sabe dónde están los certificados y Spring Security está configurado, nos gustaría que tomcat maneje todo el ssl y apache simplemente para empeñarlo en tomcat.

¿Es esto posible o me falta algo? ¿Alguien tiene alguna instrucción clara sobre cómo configurar esto? Cualquier ayuda será apreciada.

Estamos utilizando Apache 2.2 y el tomat 7.0.27

Gracias

Respuesta

5

No se puede simplemente retransmitir el tráfico SSL/TLS a Tomcat desde Apache. O bien su conexión SSL termina en Apache, y luego debe revertir el tráfico proxy a Tomcat (SSL es raramente útil en este caso), o hace que los clientes se conecten directamente a Tomcat y le permitan manejar la conexión SSL.

No estoy seguro de dónde ha leído que mod_jk puede pasar la conexión SSL en sí a Tomcat. Tendría que retransmitir directamente el zócalo, evitando así el protocolo AJP utilizado por mod_jk (por cierto, mod_proxy_ajp es la nueva forma, o incluso mod_proxy_http).

No estoy seguro de por qué querría que Apache esté frente a Tomcat si quiere que Tomcat maneje las solicitudes SSL de todos modos. Si esto tiene que ver con números de puertos o algo así, use una regla de firewall para reenviar el puerto 443 al puerto Tomcat.

Además, tenga cuidado con la forma en que se realizan estas redirecciones automáticas de HTTP a HTTPS: they only happen after the initial HTTP request has been made.

+1

Estoy de acuerdo. Especialmente sobre el punto mod_proxy_ *. Usamos Apache que maneja nuestro SSL y luego mod_proxy_http para reenviar solicitudes a Tomcat. Funciona genial. Y configuración súper simple. – Gregg

0

Por su publicación, no puedo decir si se está encontrando con un problema mientras SSL trabaja en Apache o si, dado que tiene ciertas partes de su aplicación sobre http, Apache nunca redirige a través de SSL. Tenga en cuenta que está perfectamente bien tener múltiples "segmentos" sobre ssl (es decir, usuario -> Apache sobre ssl y Apache -> tomcat sobre ssl).
1.Si el problema es hacer que ssl funcione sobre Apache, deberá asegurarse de que ssl esté configurado correctamente en el extremo de Apache.
2. Si el problema es "redirigir", intente mantener URL separadas para http y https. Me gusta /something.mysite.com/non_ssl/ y /something.mysite.com/ssl/. Esto hará que sea más fácil escribir las reglas en Apache.