Apache : Using SSL with j_security_check 背后的 Tomcat

标签 tomcat ssl apache2 apache j-security-check

我在 Apache 后面的 Tomcat 上使用 SSL 时遇到了一点问题。我整个上午都在使用 Google 试图找到一个好的解决方案,但到目前为止一无所获。

作为我的 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 .不仅登录信息是 secret 的,而且传输的数据也是 secret 的,因此我需要将其保存为 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 强制执行的吗?

干杯

尼克

最佳答案

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

对于您的特定设置,如果您像这样添加 redirectPort 可能会起作用,

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

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

这仅在您在同一台机器上安装 Apache 和 Tomcat 时有效。在生产环境中,情况可能并非如此。

关于Apache : Using SSL with j_security_check 背后的 Tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1458977/

相关文章:

java - APACHE TOMCAT 服务器未启动

jsp - 在即时 JSP 编译中导入失败

tomcat - 我可以在任何代码重新编译时强制重新加载 grails 开发服务器吗?

android - 如何处理 "javax.net.ssl.SSLHandshakeException",改造错误响应?

c - 为 libcurl 添加自签名 SSL 证书

.htaccess - 当某些查询字符串存在时允许访问,否则拒绝

java - AWS EC2、Tomcat7、Spring Boot、web、mvc、REST - http get 方法不起作用

ssl - Https 在我的 kubernetes 集群上无法在本地工作

ubuntu - 使用来自 Cloudflare 的 .pem 和 .key 设置 Ubuntu Apache2 SSL

server - 如何使用 php 脚本重新启动 apache2 服务?