3

使用 Tomcat 7.0.32,我们有一个登录页面,默认情况下,用户通过 http 访问。我们立即将用户重定向到使用 https。
目标:用户输入凭据后,我们希望使用 http 将用户重定向到主页。

我了解安全风险——中间人、会话劫持等。

我不能使用弹簧安全——在游戏中为时已晚——发布很快就会到来,而且 https 性能很糟糕。

此外,我们的应用程序有一个“更改密码”用例——用户从主页的菜单访问“changepassword.jsp”,我想我应该使用 https 将用户重定向到“changepassword.jsp”。确认密码更改后,使用 http 再次将用户重定向回主页。想法?

如何去做 - 是否有可用的示例代码?

更新 1:我从
1) http://tomcat.10.n6.nabble.com/Session-lost-when-switching-from-https-to-http-after-upgrade-to-Tomcat中了解了这个问题-6-td2105781.html
2) http://tomcat.10.n6.nabble.com/how-to-auto-redirect-to-https-from-http-td2087325.html

来自https://forums.oracle.com/forums/thread.jspa?threadID=1394970 (Cabir)的代码

我应该期待什么问题?

4

4 回答 4

5

你说“我知道 Spring Security 可以做到”,但实际上 Spring Security 并没有做任何特别的事情。它只是执行到 HTTPS 的重定向,这是您自己做的。如果您使用安全 cookie 创建会话,然后切换回 HTTP,您将丢失该会话。这在Spring Security FAQ中有解释。正如它所解释的,如果您在重定向到 HTTPS 之前创建会话,那么会话 cookie 将不会被标记为安全,并将通过 HTTP 和 HTTPS 传递,从而始终保持会话。

我能想到的唯一其他选项是使用 mod_headers 或其等效项来修改Set-Cookie标头并删除Secure标志(如果存在)。这是一个相反的例子,将标志添加到所有cookie。

顺便说一句,您是否尝试过使用 HTTPS 调整网站的性能?如果您的内容和用户帐户有任何真正的价值,那么您真的应该在整个应用程序中使用它。

于 2012-12-02T19:46:25.933 回答
2

“会话劫持”在不同的上下文中意味着不同的事情。您正在考虑一个系统,我可以在十分钟内使用 WireShark 劫持一个会话,并且之前没有经验。我只需要获取未加密的 cookie 并将其复制到 Chrome 中。这似乎是一个太低的进入门槛。

您应该重新考虑 https 对性能的影响,这可能是http 2.0 的必需部分(抱歉,PDF)。来自文档(第 32-33 页):

在我们的生产前端机器上,SSL/TLS 占 CPU 负载的不到 1%,每个连接不到 10KB 的内存和不到 2% 的网络开销 - Adam Langley (Google)

如果性能是问题,我会花十分钟在我的服务器中配置 SPDY,而不是避免使用 https。

于 2012-12-08T21:05:45.960 回答
1

是否可以在 Tomcat 前面放置一个 Apache HTTP 服务器?

如果您配置反向代理,您可以让 Apache 处理 SSL 流量。

通过这种方式,您可以将登录和更改密码页面的请求重定向到 HTTPS。

于 2012-12-03T14:56:16.307 回答
0

为什么不使用 Java 身份验证和授权服务JAAS 使用用户凭据可以使LoginContext

LoginContext 将登录到服务器容器,登录后您可以轻松地从 HTTP 请求对象获取用户会话。通过这种方式,您可以获得用户会话,无论是 HTTP 还是 HTTPS。单击更改密码链接后,用户应被引导至安全 URL,请求对象将提供所需信息。

您可以在 JAVA API 中启用 cookie

CookieHandler.setDefault(new CookieManager());

或 Cookie 政策以接受所有 cookie。

CookieManager customCookieManager = new CookieManager(); customCookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL); CookieHandler.setDefault(customCookieManager);

于 2012-12-07T09:43:57.067 回答