2012-04-06 64 views
9

我一直在到处找,但找不到以下情况有清楚的解决方案:Tomcat的背后Apache和SSL

我们有一个Web应用程序(Grails的+春季安全),它在Tomcat中运行,后面的Apache。 应用程序的第部分需要在https上运行,因此使用Spring Security Channel Security时,无论您何时导航到安全的应用程序的一部分,Spring都会使用302状态代码将您重定向到https。

现在,tomcat设置为了解https和证书,因此它知道如何处理ssl。事实上,当直接通过url和port直接访问apache来直接访问apache时,一切正常。

现在的问题出现在将Apache放在tomcat之前。目前我们拥有的apache配置对应用程序的非安全部分工作正常。我们使用mod_jk来代理apache和tomcat。

然而,一旦你尝试去应用程序的安全部分,Spring会重定向你,它会打Apache的配置的

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

一部分......这是在哪里问题开始。

从我读到的,可以通过mod_jk将apache传递给tomcat。但我们似乎无法得到正确的配置。由于tomcat已经为ssl设置,它知道证书的位置,并且Spring Security被设置,所以我们希望tomcat处理所有的ssl,而apache仅仅是将它转换为tomcat。

这是可能的,还是我错过了什么?有没有人有明确的指示如何设置?任何帮助将不胜感激。

我们使用Apache 2.2和把tomat 7.0.27

感谢

回答

5

你不能只从Apache的中继SSL/TLS通信到Tomcat。您的SSL连接都在Apache结束,然后您应该将流量反向代理到Tomcat(在这种情况下,SSL很少有用),或者使客户端直接连接到Tomcat并让它处理SSL连接。

我不确定你在哪里看过mod_jk可以将SSL连接本身传递给Tomcat。它需要直接中继套接字,因此绕过了mod_jk所使用的AJP协议(顺便说一下mod_proxy_ajp是新的方式,甚至是mod_proxy_http)。

我不确定为什么你希望Apache在Tomcat前面,如果你希望Tomcat处理SSL请求。如果这与端口号有关,则使用防火墙规则将端口443转发到Tomcat端口。

此外,请谨慎处理这些自动重定向从HTTP到HTTPS的方式:they only happen after the initial HTTP request has been made

+1

我同意。特别是关于mod_proxy_ *点。我们使用Apache处理我们的SSL,然后使用mod_proxy_http将请求转发给Tomcat。很棒。和超级简单的配置。 – Gregg 2012-04-06 18:48:27

0

从你的文章,我不能告诉你是否遇到一个问题,同时获得ssl的Apache的工作,或者,因为你有某些部分的应用程序通过HTTP,Apache从不重定向到SSL。请注意,它完全可以在ssl上使用多个“段”(即通过ssl使用用户 - > Apache,而通过ssl使用Apache - > tomcat)。
1。如果问题是通过Apache获取ssl,则需要确保在Apache端正确安装ssl。
2.如果问题是“重定向”,请尝试并为http和https保留单独的url。像/something.mysite.com/non_ssl/和/something.mysite.com/ssl/。这将使在Apache中编写规则更容易。