Apache TLS(SSL)性能

Apache TLS(SSL)性能

我们正在运行一台相当强大的专用服务器,该服务器配备 Xeon CPU、32GB RAM 和 RAID SSD,运行 Centos 6。然而,我们仍然看到 HTTPS 使我们的页面下载时间增加了 100 多毫秒。我们能做些什么来将速度提高 20 毫秒?

以下是 Apache 设置:

SSLHonorCipherOrder on

SSLRandomSeed startup file:/dev/urandom 512
SSLRandomSeed connect file:/dev/urandom 512

SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-EC$
SSLProxyCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECD$

SSLProtocol all -SSLv3 -SSLv2
SSLProxyProtocol all -SSLv3 -SSLv2

SSLPassPhraseDialog  builtin
SSLSessionCache        "shmcb:/var/run/ssl_scache(5120000)"
SSLSessionCacheTimeout  300

SSLUseStapling On

SSLStaplingCache "shmcb:/var/run/ssl_stapling(128000)"
SSLStaplingReturnResponderErrors off

SSLStaplingStandardCacheTimeout 3600
SSLStaplingErrorCacheTimeout 600
SSLStaplingResponderTimeout 5

答案1

尽管有各种说法称 HTTPS 会减慢您的网站速度,但事实并非如此。这是因为客户端和服务器需要协商 SSL/TLS 密码才能启动。然而对于大多数网站来说,这种速度减慢可以忽略不计,而且 SSL 可以带来巨大的好处。

此外,默认值为 http,因此当有人进入仅支持 https 的站点时,需要重定向到 https 版本,从而导致另一次往返。

对于初始连接来说,100 毫秒的减速其实不算太严重,正如我所说,之后连接就会建立,因此不会出现减速。因此首先,虽然初始连接速度很重要,但浏览网站也很重要,此时你不应该受到 100 毫秒减速的影响。

您的 SSL/TLS 配置实际上看起来相当不错,无论是在安全性还是性能方面。您使用的是现代且快速的密码和套件(尽管您的密码套件仅对新浏览器有严格限制,如果这是故意的,那么您也可以关闭 TLSv1 和 TLSv1.1),设置了 SSL 缓存(以避免客户端为每个连接重新协商 SSL 会话),并设置了 SSL 装订(以避免客户端额外查找以检查证书的有效性)。

不过我可以提出以下一些建议。这些建议可能会减少使用 https 的影响,但不会减少最初的 100ms 连接延迟:

  1. 确保服务器的 Keep-Alives 已打开(默认情况下应为打开状态,但最好仔细检查)。你应该确保你做到了不是在响应中看到“Connection: close”标头。如果没有 Keep-Alives,您的 SSLCache 就毫无意义。

  2. 将您的 SSLSessionCacheTimeout 从 300 秒或 5 分钟增加。如果您在网站上浏览,您很容易超出该时间。您已经限制了 SSLSessionCache 的大小,因此将此超时时间增加到更高的值也无妨。

  3. 实施 HSTS 以告知浏览器您的网站始终首选 https(即使用户在浏览器地址栏中未输入任何协议 - 或者即使他们输入 http)。这将保存初始重定向。

  4. HTTP/2 将有助于提高 https 连接速度,因为您不再使用并行连接,但更重要的是,它将以其他方式提高性能。不过,它对于 Apache 来说仍然是实验性的(不过在我看来已经足够稳定了)。

我还建议您定期通过以下方式运行您的服务器https://www.ssllabs.com/ssltest/index.html测试您的 SSL/TLS 配置,因为随着新漏洞的发现,该领域的情况不断发生变化。

答案2

您可以启用 HTTP/2,这将减少兼容浏览器的连接数,从而减少页面加载时间。但这不会减少该连接的延迟。演示这里

也可以看看这个问题- 在这种情况下,延迟是关键。我对位于澳大利亚悉尼的 https 服务器进行了速度测试。从另一台悉尼服务器测试时,SSL 握手时间为 46 毫秒,从美国的 EC2 测试时,则为 213 毫秒。差异是由于往返数据包时间,此外,即使延迟为零,也有一些不可避免的开销。我不知道这个强制延迟是多少,但您可能可以通过实验来解决这个问题。

您是从靠近服务器的客户端进行测试的,还是从远离服务器的客户端进行测试的?ping 值是多少?另一个有用的页面围绕 https 握手。100ms 对于 https 来说可能并不算太糟糕的开销。

可能有人会推荐一些 Apache 调整。如果您发布您的网站链接,有人可能会看一看。

答案3

这不是一个好答案,但如果你在优化 SSL 之前愿意了解它的工作原理,这里有一个快速 HTTPS 清单

  • ECDSA 证书
  • 熵源
  • TLS1.2 协议
  • 硬件支持的密码套件:AES-NI
  • SSL 会话缓存
  • OCSP 装订
  • HTTP/2

我所有与服务器相关的知识都发布在这个存储库中https://github.com/szepeviktor/debian-server-tools

一切顺利!

相关内容