会议

会议

我遇到了一个问题,Apache 服务器使用 SSL 256 位证书速度很慢

ab -n 500 https://example.com/
Time per request 29 ms

ab -n 500 http://example.com/
Time per request 10 ms

两个请求都发送了 52 字节,并且测试是在同一个数据中心的服务器上进行的

会议

SSLEngine on
SSLProtocol All -SSLv2
SSLHonorCipherOrder On
SSLCipherSuite ALL:!ADH:!EXP:!LOW:!RC2:!3DES:!SEED:!RC4:+HIGH:+MEDIUM

SSL 比普通 HTTP 请求慢 3 倍是正常的吗?

答案1

你是如何对你的服务器进行基准测试的?你的 HTTPS 服务器后面运行着什么应用程序?你的服务器使用什么 CPU?你看,你的问题缺少很多重要的细节……

无论如何,SSL 肯定比“纯”HTTP 慢一些:公钥加密比对称密钥加密慢得多,这就是为什么 pubkey 仅用于交换私有对称密钥并且通道切换到对称密钥加密的原因。

答案2

HTTPS 速度较慢,因为它需要交换更多数据(来自服务器的 X.509 证书),需要建立安全的数据连接,...

ab可以提供“连接”时间,这就是您会看到时间差异的地方。TLS 设置比没有设置需要更多时间。

答案3

您需要认识到ab所做的事情和浏览器所做的事情之间的区别。(我不会回答所做ab的事情,因为我对此不够熟悉)。

例如:

  1. 使用 TLS 会话是否ab重复使用?浏览器会重复使用,并且因此执行速度会更快(对于后续请求)。您可以使用 wireshark 验证这一点(也许https://ask.wireshark.org/questions/9007/ssl-session-reuse很有用)
  2. 正在ab使用已知速度较慢的密码(您可以在 ssl_request_log 中看到协商的密码是什么)
  3. 您是否支持 HTTPS 连接上的 HTTP 保持活动?您应该支持,即使只是足够长的时间来提取页面上的所有资产。这将真正减少对服务器发出的 SSL/TLS 请求数量。
  4. 您的网站上有缓存友好的内容吗(尤其是浏览器缓存)——您是否使用了诸如这样的响应标头Cache-Control: public, max-age=3600, s-max-age=3600

如果您专注于这些,那么您可以轻松地让仅使用 HTTPS 的网站运行良好且快速。这就是我为仅使用 HTTPS 的视频流网站所做的,而且我不必担心 SSL 连接时间。

答案4

网站速度变慢的原因:

  • SSL 证书携带多个中间证书,可增加握手期间的数据量。

  • OCSP 和 CRL 的性能也没有得到纠正,因为网站需要 1/3 秒的时间来回复 OCSP 请求并建立连接。

对于快速 HTTPS 连接的建议:

  • 可以通过压缩文本内容来减轻CPU资源的利用率,或者升级当前进程来处理加密任务。

  • 您需要确保页面上的所有内容都是通过 HTTPS 检索的。

  • 借助快闪记忆体- Google 的一项开源网络协议,可最大限度地缩短网页加载时间。

  • 在证书颁发机构方面,CA 可以减少 OCSP 和 CRL 响应时间从300ms到100ms(毫秒)。

  • CA 可以减少 SSL 证书中的中间链大小,因为它会消耗额外的字节和时间。

相关内容