Tomcat por trás do Apache e SSL

9

Eu tenho procurado em todos os lugares, mas não consigo encontrar uma solução clara para a seguinte situação:

Temos um aplicativo da web (Grails + Spring Security) em execução no tomcat, atrás do apache. A Parte do aplicativo precisa ser executada em https, portanto, usando o Spring Security Channel Security, sempre que você navegar para uma parte do aplicativo que seja segura, o Spring o redirecionará para https com um código de status 302. / p>

Agora, o tomcat está configurado para saber sobre os https e certificados, por isso sabe como lidar com o ssl. Na verdade, quando o apache de um passo a lado é direcionado diretamente para o URL e a porta para acessar o tomcat diretamente, tudo funciona 100%.

O problema agora aparece quando colocamos o apache na frente do tomcat. A configuração do apache que temos no momento funciona bem para as partes não seguras do aplicativo. Estamos usando mod_jk para proxy apache e tomcat.

No entanto, assim que você tentar ir para uma parte segura do aplicativo, o Spring o redirecionará, ele acessará o

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

parte da configuração do apache ... e é aí que o problema começa.

Pelo que li, é possível para o apache, via mod_jk, passar o tratamento ssl para o tomcat. Mas não conseguimos obter a configuração para isso correto. Como o tomcat já está configurado para o ssl, ele sabe onde estão os certificados e o Spring Security está configurado, gostaríamos que o tomcat manipulasse todos os ssl e o apache meramente para penhorá-lo para o tomcat.

Isso é tudo possível, ou estou faltando alguma coisa? Alguém tem alguma instrução clara sobre como configurar isso? Qualquer ajuda será muito apreciada.

Estamos usando o Apache 2.2 e o tomat 7.0.27

Obrigado

    
por Nico Huysamen 06.04.2012 в 11:49

2 respostas

5

Você não pode simplesmente retransmitir o tráfego SSL / TLS para o Tomcat do Apache. Sua conexão SSL termina no Apache e, em seguida, você deve fazer o proxy reverso do tráfego para o Tomcat (o SSL raramente é útil nesse caso) ou fazer os clientes se conectarem ao Tomcat diretamente e permitir que ele manipule a conexão SSL.

Não sei onde você leu que mod_jk pode passar a conexão SSL para o Tomcat. Ele precisaria retransmitir o soquete diretamente, ignorando, portanto, o protocolo AJP usado por mod_jk (a propósito, mod_proxy_ajp é o novo caminho, ou mesmo mod_proxy_http ).

Não sei por que você gostaria que o Apache estivesse na frente do Tomcat se você quiser que o Tomcat lide com as solicitações SSL de qualquer maneira. Se isso tem a ver com números de portas ou algo assim, use uma regra de firewall para encaminhar a porta 443 para a porta do Tomcat.

Além disso, seja cauteloso quanto ao modo como esses redirecionamentos automáticos de HTTP para HTTPS são feitos: eles só acontecem após a solicitação HTTP inicial ter sido foi feito .

    
por Bruno 06.04.2012 / 15:19
0

A partir do seu post, não sei dizer se você está com problemas ao obter o ssl para trabalhar no Apache ou se, como você tem certas partes do seu aplicativo sobre http, o Apache nunca redireciona o SSL. Observe que é perfeitamente correto ter vários "segmentos" sobre ssl (ou seja, usuário - > Apache sobre ssl e o Apache - > tomcat sobre ssl).
1. Se o problema for fazer com que o SSL funcione com o Apache - você precisará certificar-se de que o SSL esteja configurado corretamente no final do Apache.
2. Se o problema for "redirecionamento", tente manter URLs separadas para http e https. Como /something.mysite.com/non_ssl/ e /something.mysite.com/ssl/. Isso tornará mais fácil escrever as regras no Apache.

    
por souser 06.04.2012 / 23:02