首页 文章

Tomcat落后于Apache和SSL

提问于
浏览
9

我一直在寻找,但无法找到以下情况的明确解决方案:

我们有一个web应用程序(Grails Spring Security),它运行在tomcat,后面是apache . Part 应用程序需要在https上运行,因此使用Spring Security Channel Security时,无论何时导航到安全的应用程序的一部分,Spring都会将您重定向到具有302状态代码的https .

现在,设置tomcat以了解https和证书,因此它知道如何处理ssl . 实际上,当直接通过直接访问url和端口来直接命中tomcat时,所有的工作都是100% .

现在问题在于将apache放在tomcat之前 . 我们现在拥有的apache配置适用于应用程序的非安全部分 . 我们使用mod_jk来代理apache和tomcat .

但是,只要您尝试转到应用程序的安全部分,Spring就会重定向您,它会触及

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

apache配置的一部分...这就是问题开始的地方 .

根据我的阅读,apache可以通过mod_jk将ssl处理传递给tomcat . 但我们似乎无法获得正确的配置 . 由于已经为ssl设置了tomcat,它知道证书的位置,并且Spring Security已经设置好了,我们希望tomcat能够处理所有的ssl,而apache只是将它伪装成tomcat .

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

我们使用的是Apache 2.2和tomat 7.0.27

谢谢

2 回答

  • 5

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

    我'm not sure where you'已经读过 mod_jk 可以将SSL连接本身传递给Tomcat . 它需要直接中继套接字,因此绕过 mod_jk 使用的AJP协议(顺便说一句 mod_proxy_ajp 是新的方式,甚至是 mod_proxy_http ) .

    如果你希望Tomcat无论如何都要处理SSL请求,我不确定你为什么要让Apache在Tomcat前面 . 如果这与端口号或其他内容有关,请使用防火墙规则将端口443转发到Tomcat端口 .

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

  • 0

    从你的帖子中,我无法判断你是否遇到问题,同时让ssl在Apache上工作,或者是否因为你的某些应用程序部分通过http,Apache永远不会重定向到ssl . 请注意,完全可以在ssl上使用多个"segments"(意味着用户 - > Apache over ssl和Apache - > tomcat over ssl) .
    1.如果问题是让ssl在Apache上工作 - 你需要确保在Apache端正确设置了ssl .
    2.如果问题是"redirect",请尝试为http和https保留单独的URL . 喜欢/something.mysite.com/non_ssl/和/something.mysite.com/ssl/ . 这将使在Apache中编写规则变得更容易 .

相关问题