SSL施加了多少开销?


168

我知道没有一个简单而准确的答案,但是对于SSL加密开销与未加密套接字通信而言,是否存在通用的数量级估计近似值?我只在谈论通讯处理和连线时间,而不是在计算应用程序级别的处理。

更新资料

关于HTTPS和HTTP存在一个问题,但我有兴趣在堆栈中寻找更低的位置。

(我更换了那句“量级”以避免混淆,我用它作为非正式的术语,而不是在正规CompSci意义当然,如果我。正式的意思是,作为一个真正的怪胎我会一直思考的二进制,而不是十进制!;-)

更新资料

根据评论中的请求,假设我们正在通过持久连接讨论大小合适的消息(范围为1k-10k)。因此,连接设置和数据包开销不是重要问题。


您可以看看这个类似的问题
达琳·迪米特罗夫

1
您能否再描述一下您的应用程序?例如,它是否建立了许多短暂的连接?连接后,单个消息的大小趋向于多大?(例如,也许您正在通过SSL隧道使用Telnet刷新每个按键,或者也许正在复制1个Tb日志文件。)
erickson

Answers:


178

数量级:零。

换句话说,添加TLS时,您不会看到吞吐量减少一半或类似的东西。对“重复”问题的答案主要集中在应用程序性能以及与SSL开销相比如何。该问题专门排除了应用程序处理,并试图将非SSL与SSL进行比较。尽管在优化时从全局角度考虑性能是有道理的,但这并不是这个问题要问的。

SSL的主要开销是握手。那就是发生昂贵的非对称加密的地方。协商后,使用相对有效的对称密码。这就是为启用许多连接的HTTPS服务启用SSL会话非常有用的原因。对于长期存在的连接,这种“最终效果”没有那么重要,会话也没有那么有用。


这是一个有趣的轶事。当Google将Gmail切换为使用HTTPS时,不需要其他资源。没有网络硬件,没有新主机。它仅使CPU负载增加了大约1%。


6
您如何“为HTTPS服务启用SSL会话”?有什么好的资源可以了解这一点?
贾斯汀·文森特

1
启用S​​SL会话是特定于服务器的。阅读服务器的手册。
erickson

7
@Bart van Heukelom-Keep-alive将帮助保持套接字(和SSL连接)打开更长的时间,这很有帮助。但是SSL会话会导致在套接字之间“记住”协商的密码参数。因此,HTTP保持活动状态对于加载包含其引用内容的单个网页很有用,但是几秒钟后,该连接将关闭。例如,三分钟后,当提取另一个页面时,SSL会话允许重新建立SSL连接,而无需重复完整的握手。特别地,可以跳过与公共密钥加密的密钥交换。
erickson 2010年

2
@Tony您是否有现实世界中的示例TLS增加了超过百分之几的开销?我的回答和问题一样普遍。如果您有其他看法,请分享。
埃里克森

3
@Tony我已经看到,当一次写入一个字节时,就空间而言,普通套接字的性能比SSL套接字高42倍,这是最糟糕的情况。从未见过250倍。我在Internet上用1700个数据点进行了广泛的实验,结果是,使用比缓冲和刷新更复杂的编程,纯文本套接字的速度不比SSL快三倍。给出实验日期的JSSE,可能是Java 5。
2014年

39

我第二个@erickson:纯粹的数据传输速度损失可以忽略不计。现代CPU达到了数百MBit / s的加密/ AES吞吐量。因此,除非您使用的是资源受限的系统(移动电话),否则TLS / SSL足够快,可以将数据传送出去。

但是请记住,加密会使缓存和负载平衡变得更加困难。这可能会导致巨大的性能损失。

但是,对于许多应用程序而言,连接设置实际上是一个障碍。在低带宽,高数据包丢失,高延迟连接(农村移动设备)上,TLS要求的额外往返行程可能会使某些速度变慢,从而变得无法使用。

例如,我们必须放弃对访问某些内部Web应用程序的加密要求-如果从中国使用,它们几乎无法使用。


20
事隔4年:中国可能也故意将所有SSL / TLS流量搞砸了。
最高

3
中国审查互联网并试图嗅探每个人的流量并不是什么新闻。经过4年的事后回顾,您可能会认为这是NSA MITMing进入您网站的途中。
Eugene Beresovsky

不稳定连接的关键是,一次设置加密,然后除非真正必要,否则避免重新协商,并且允许双方随时更改其IP地址而不会眨眼。(OpenVPN支持这一点。)由于MTU可能非常不可靠且完全不诚实,因此IT有助于实现分段。
Evi1M4chine

12

假设您不计算连接设置(如您在更新中所指出的),则它很大程度上取决于所选的密码。网络开销(就带宽而言)可以忽略不计。CPU开销将由加密控制。在我的移动Core i5上,我可以在单个内核上使用RC4每秒加密约250 MB。(应该选择RC4以获得最大性能。) AES速度较慢,“仅”提供约50 MB / s。因此,如果您选择正确的密码,即使您已经充分利用了1 Gbit线路,也无法使单个当前内核忙于加密开销。[ 编辑:RC4不应该使用,因为它不再安全。但是,现在许多CPU中都提供了AES硬件支持,这使得AES加密在此类平台上的确非常快。

但是,建立连接是不同的。根据实现方式(例如,对TLS错误启动的支持),它将添加往返,这可能导致明显的延迟。此外,昂贵的加密会在第一个连接建立时发生(如果您愚蠢地使用4096位密钥,则上述CPU每秒只能接受每核14个连接,而如果您使用2048位密钥,则CPU每秒只能接受100个连接)。在随后的连接上,以前的会话经常被重用,从而避免了昂贵的加密。

因此,总结一下:

在已建立的连接上转移:

  • 延误:几乎没有
  • CPU:微不足道
  • 带宽:可忽略不计

首次连接建立:

  • 延误:额外往返
  • 带宽:几千字节(证书)
  • 客户端上的CPU:中等
  • 服务器上的CPU:高

后续连接建立:

  • 延迟:额外的往返(不确定一次还是多次,可能取决于实现)
  • 带宽:可忽略不计
  • CPU:几乎没有

重要说明:谁都不要再使用RC4。必须将该协议视为已损坏,并且至少出于间谍组织的安全起见,必须将与该协议的RC4传输视为等同于未加密的传输。如今,强烈建议使用chacha20-poly1305之类的东西进行批量加密,因为它独立于此类组织。
Evi1M4chine 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.