【问题标题】:how expensive is SSL for a RESTful API?RESTful API 的 SSL 有多贵?
【发布时间】:2011-06-01 14:37:03
【问题描述】:

我正在制作一个 RESTful API,我想知道如果每个请求都使用 SSL 完成,服务器的计算成本有多大?这可能很难量化,但与非 SSL 请求进行比较会很有用(例如,1 个 SSL 与 30 个非 SSL 请求一样昂贵)。

我是否认为要建立 SSL 连接,双方都需要生成公钥和私钥,相互共享,然后开始通信。如果在使用 RESTful API 时,这个过程是否会发生在每个请求上?或者是否有某种缓存可以在给定的时间段内重用给定主机的密钥(如果有,它们会在多长时间内过期?)。

最后一个问题,我问的原因是因为我正在制作一个使用 facebook connect 的应用程序,并且涉及一些访问令牌,它们授予对某人的 facebook 帐户的访问权限,话虽如此,为什么 facebook 允许传输这些通过非加密连接访问令牌?当然,他们应该像用户名/密码组合一样保护访问令牌,并因此强制 SSL 连接......但他们没有。

编辑:facebook 实际上会在传输 access_token 时强制执行 HTTPS 连接。

【问题讨论】:

  • 回答您的最后一个问题:他们应该要求任何包含机密信息(例如访问令牌)的 SSL 连接。然而,Facebook 并没有以对隐私的承诺而闻名。
  • @Cameron,事实证明他们确实要求您在传输访问令牌时通过 https 进行连接。我的坏

标签: rest ssl https facebook


【解决方案1】:

SSL流程大致如下:

  • 服务器(以及可选的客户端)使用证书提供其(现有的,未生成的)公钥,以及签名的质询。对方验证签名(其数学有效性、到 CA 的证书路径、吊销状态……)以确保对方是其声称的身份。

  • 在经过身份验证的各方之间协商一个秘密会话密钥(例如使用 Diffie Hellman 算法)。

  • 双方切换到加密通信

到目前为止,这是一个昂贵的协议,每次建立套接字时都会发生。您不能缓存有关“谁在另一边”的检查。这就是为什么你应该持久化套接字(带有 REST 的事件)。

【讨论】:

  • 这与您描述的方式不完全一样 - TLS 支持会话恢复,因此无需每次都执行完整的握手。
  • 我想强调一个事实,即公钥/私钥对只生成一次,而不是每个连接生成一次。这很重要,因为生成公钥/私钥对非常昂贵,但会话密钥协商要少得多。
  • @Cameron 私钥/公钥根本不会在握手期间生成。
  • @Eugene:是的,没错。它们生成一次,离线。
  • TLS 是一个复杂的协议,有很多选项。对于包含 DHE 的密码套件,会为每个新的(未恢复的)连接以及双方生成一个新的 DH 公钥/私钥对。
【解决方案2】:

mtraut 描述了 SSL 的工作方式,但他忽略了 TLS 支持会话恢复这一事实。然而,即使协议本身和许多符合标准的服务器都支持会话恢复,客户端实现并不总是支持它。因此,您不应依赖恢复,最好尽可能保持持久会话。

另一方面,如今 SSL 握手非常快(大约十几毫秒),因此在大多数情况下它并不是最大的瓶颈。

【讨论】:

  • 我对这些协议不是很熟悉。但是我无法想象如果不在相同的套接字连接上,会话恢复如何发生。无论如何,必须重新进行身份验证(除非套接字未关闭,如前所述)。我错过了什么吗?
  • @mtraut 我不知道那么深的细节,我们的开发人员知道。 ietf.org/rfc/rfc2246.txt,F.1.4 会帮助你。
  • @mtraut:套接字与它无关。会话最常在新套接字上恢复。正如 Eugene 所说,可以在 RFC 中找到详细信息。但是,我建议您只观察自己与wireshark 的连接,看看会发生什么。
  • @GregS,这可能是不好的风格 - 在这种情况下,我很抱歉。你似乎在这方面有很好的基础。我有一个相关的问题在这里饿死:stackoverflow.com/questions/4552978/….. 也许看看?
  • @mtraut:抱歉,我主要解释现有协议、API 和记录在案的攻击。我不做原创分析。
【解决方案3】:

http://www.imperialviolet.org/2010/06/25/overclocking-ssl.html

在我们 [Google 编辑的] 生产前端机器上,SSL/TLS 占 CPU 负载的比例不到 1%,每个连接的内存不到 10KB,网络开销不到 2%。许多人认为 SSL 占用大量 CPU 时间,我们希望上述数字(首次公开)有助于消除这种情况。

如果您现在停止阅读,您只需要记住一件事:SSL/TLS 的计算成本不再高。

【讨论】:

  • 这很有趣。但我认为应该考虑到服务器机器通常不进行证书验证(如果正确完成可能会很昂贵)。
猜你喜欢
  • 1970-01-01
  • 2016-02-02
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
相关资源
最近更新 更多