为 Web 应用程序选择纯 HTTPS 或 HTTP/HTTPS

Posted

技术标签:

【中文标题】为 Web 应用程序选择纯 HTTPS 或 HTTP/HTTPS【英文标题】:Choosing between Pure HTTPS or HTTP/ HTTPS for a web application 【发布时间】:2015-08-31 19:26:39 【问题描述】:

我遇到了一个关于在 Web 应用程序中使用 Http 或 Https 的小问题。我参考了许多关于类似主题的堆栈溢出的查询,但他们没有充分回答我的问题,所以我决定发布这个问题。

问题 我目前正在开发一个使用 J Boss 应用程序服务器的基于 Java 的 Web 应用程序。前端主要由 Struts、javascript 和 JQuery 组成。我们目前正在评估用户建议,以在登录页面中启用 HTTPS,然后在 HTTP 中继续其余用户会话。

此外,当用户会话在 http 中时,一些报告也需要在 HTTPS 中显示。这意味着用户会话将在 Http 和 HTTPS 之间切换。

以前是 Hotmail had this feature 之类的网站,但由于提高了安全性,现在已经转移到提供纯 HTTPS。

在保留用户会话的同时,是否可以(并且可行)仅在需要时同时使用 HTTPS 和 Http。与纯 HTTPS 实现相比,此实现是否会提高性能?如果是这样,是否可以遵循任何标准操作来实现这一目标?

根据普遍的看法,HTTPS 往往会降低 Web 应用程序的性能。但也有一个 increasing number of sites that use full HTTPS。例如谷歌、GMail。

假设与纯基于 Http 的站点相比,尝试纯在 HTTPS 中实现此 Web 应用程序会出现明显的性能问题吗?是否有任何方法可以提高纯 HTTPS 站点的性能?

资源

HTTP vs. HTTPS: What's the Difference?

Will web browsers cache content over https

What is the best and current way to move to HTTPS on a large website?

Transport Layer Security (TLS)

Tomcat session management - url rewrite and switching from http to https

google translate not showing up when https is used in url

Tomcat, keep session when moving from HTTPS to HTTP - Pelit Mamani 提到的资源

Is SPDY any different than http multiplexing over keep alive connections

【问题讨论】:

这是一位同事强调的关于在 Web 应用程序中同时使用 HTTP 和 HTTPS 的一些要点。 “从安全角度来看,同时使用 HTTP 和 HTTPS 并不是一个好主意。如果用户会话在 HTTP 中,则 eves-dropping 或中间人攻击非常容易。最好的方法是一旦用户切换到 HTTPS,登录系统(登录前请确保没有敏感信息),一旦用户退出系统,您可以切换回HTTP,同时您需要确认会话中的所有敏感数据在迁移到 HTTP 之前被删除。” 至于速度提升,似乎有一些方法表明 HTTPS 和 SPDY 结合起来会比仅通过 HTTP 提供网页更快。一些建议 HTTP/2 和 TLS 提供更好的选择.这些技术可以获得多少支持? 【参考方案1】:

我没有尝试使用 JBoss,而是使用 Tomcat,但是有几点可能是相关的。顺便说一句,在我们的例子中,我们让它工作了,但最终还是切换到了完整的 https。

注意事项:

1) 明显的安全隐患。黑客无法窃取您的密码,但他们可以窃听/更改不安全的内容交换。

2) 正如您所指出的 - 需要注意 cookie,尤其是它们的“安全”标志。我的经验是使用 Tomcat,但听起来它可能会出现在其他容器中:当通过 HTTPS 登录时,Tomcat 合理地假设您需要一个 secure 会话 cookie,因此在非安全页面上无法识别会话.我们必须进行一些调整,以使会话 cookie 不安全。 Tomcat, keep session when moving from HTTPS to HTTP

3) 跨域:如果您的页面是通过 http 加载的,并且它向 https 发送 AJAX 请求(反之亦然),则浏览器会应用跨域安全限制,这同样需要进行调整,例如 CORS 支持。

4) 我们最终切换到完整的 https。 它对高负载有一些性能影响(在具有其他瓶颈的服务(例如数据库)上可以忽略不计,但对于纯内存/逻辑且每秒有数十次点击的服务而言,这一点很明显)。然而,我们觉得是时候横向扩展了。我们还花了一些时间来调整 Tomcat 连接器和我们的负载均衡器,结果发现一些配置在使用 https 时效果更好。

【讨论】:

以上是关于为 Web 应用程序选择纯 HTTPS 或 HTTP/HTTPS的主要内容,如果未能解决你的问题,请参考以下文章

nginx配置https

web服务

理清web服务器跟应用服务器的基本概念(纯拷贝)

纯 Python 写一个 Web 框架,就是这么简单

web项目开发——http到https

httpd服务之虚拟主机访问控制https配置