【发布时间】:2013-10-31 16:27:34
【问题描述】:
HTTPS 启动缓慢,尤其是在低带宽和高延迟连接上,或在低规格机器上。不幸的是,这似乎是所有主要网站使用的保护登录的标准方法。
但我们通常访问的很多网站只是为了阅读信息。如果我们只是偶尔想进行写入/更新,那么等待登录是不必要的时间开销。
对我来说最令人沮丧的例子是:
- Github。我经常想访问一个 github 页面,只是为了阅读项目的概述或查看文件。但我必须等待 SSL 握手,即使我不想做任何与我的个人帐户相关的事情。 Github 总是将我的浏览器从 HTTP 重定向到 HTTPS。为什么?!
我了解安全连接对于验证用户帐户非常重要。但是,当这影响了简单查看公共页面的用户体验时,我们应该尝试找出替代方案(并鼓励主要网站采用它)。
这是一种可能的解决方法 (1):
- 允许用户与我们的网站建立 HTTP 连接,因此我们可以快速呈现页面,而无需 SSL 握手。
- 允许在页面加载后登录。也许通过 HTTPS 的 Ajax 请求可以验证用户身份,并为页面提供相关更新。 (这从根本上是不安全的吗?编辑:是的,它并不完全安全,请参阅下面的答案。)
另一种选择可能是(2):
- 不使用 HTTPS 上的长期 cookie,而是使用长期一次性密钥 cookie 的组合用于持久登录,以及短期 cookie 用于通过 HTTP 进行的非线性浏览。经常更换它们。 (这可能不如 HTTPS 安全,但比 HTTP 上的正常长期 cookie 使用更安全。)
这些解决方案看起来是否足够安全,或者您能提出更好的建议吗?
(我是在离美国网络很远的印度尼西亚附近写这篇文章的,这可能不是巧合!)
【问题讨论】:
-
ssl 不是“慢”。它与传输的非 SSL 连接一样快。它确实有很大的启动开销,但是一旦连接开始,差别就很小了。允许 http keep-alives 使连接/重新连接开销最小化。
-
你使用什么编程语言?如果它是 Java - 请查看 websockets:docs.oracle.com/javaee/7/tutorial/doc/websocket.htm btw,SSL 仅在交换密钥的第一部分很慢,之后加密/解密部分使用非常类似于
3DES的算法运行得非常快 -
困扰我的是握手,所以我更新了问题。这似乎是一个小问题,直到您每天经历 20 次! Keep-Alive 肯定会有所帮助,但在某些时候,用户需要再次握手,可能是到他一个小时前才访问过的网站。我认为这是一个网络问题,因此与语言无关。
-
一种可能的解决方案就在我们眼前! Stackoverflow 本身使用 HTTPS 进行登录,然后使用短暂的 HTTP cookie 进行会话。然而,当涉及金融交易时,这可能被认为不够安全,例如在电子商务网站上。 stackoverflow.com/questions/709085/…
标签: security cookies https user-experience latency