1

在 Apache 后面的 Tomcat 上使用 SSL 有一点问题。我整个早上都在使用谷歌试图找到一个好的解决方案,但到目前为止还没有。

作为我的 SSL VirtualHost 配置的一部分,我有

<Location /MyApp/>
  ProxyPass http://localhost:8080/MyApp/
</Location>

这在大多数情况下都可以正常工作,但是 j_security_check 在从https://mysite.com/MyApp成功登录后,会重定向到 HTTP 页面http://mysite.com/MyApp/secret.html而不是将其保留为 HTTPS页面https://mysite.com/MyApp/secret.html。不仅登录是机密的,还有正在传输的数据,所以我需要保持 HTTPS。当我添加到应用程序的安全约束时

<user-data-constraint>
  <transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>

它重定向到https://mysite.com:8443/MyApp/secret.html。我意识到它重定向到 8443,因为 server.xml 已将 SSL 配置为 8443,但由于这是通过 Apache 代理的,它实际上应该是 443。

我意识到我没有 ProxyPassReverse,但这不是我可以在 Apache 配置文件的一部分中添加的东西

如何强制 j_security_check 重定向相对(所以不要将 https 更改为 http)或重定向到 443 而不是 8443?这是我应该通过 Tomcat 或 Apache 的 mod_proxy 强制执行的吗?

干杯

尼克

4

1 回答 1

1

您不能真正指望 Tomcat 为您的设置重定向到 SSL。您需要编写一个过滤器来自己进行重定向。

对于您的特定设置,如果您像这样添加重定向端口,它可能会起作用,

<Connector ... port="8080" redirectPort="443"/>

请移除 HTTPS 连接器。当您同时拥有 redirectPort 和 HTTPS 连接器时,它可能会混淆某些版本的 Tomcat。听起来您无论如何都不希望人们访问您的 HTTPS 端口。

这只适用于在同一台机器上安装 Apache 和 Tomcat 的情况。在生产环境中,情况可能并非如此。

于 2009-09-22T14:20:43.653 回答