Apache TLS (SSL) 性能

mar*_*sds 2 performance ssl https tls apache-2.4

我们正在运行具有 Xeon CPU、32GB RAM 和运行 Centos 6 的 RAID SSD 的相当强大的专用服务器。然而,我们仍然看到 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
Run Code Online (Sandbox Code Playgroud)

Bar*_*ard 6

尽管有相反的说法,HTTPS 确实会减慢您的网站速度。这是因为客户端和服务器需要在开始之前协商 SSL/TLS 密码。然而,之后,对于大多数站点来说,放缓是可以忽略不计的,而且 SSL 有巨大的好处。

此外,默认值为 http,因此为仅限 https 的站点输入该地址的人需要重定向到 https 版本,从而导致另一次往返。

对于初始连接来说,100 毫秒实际上并没有那么糟糕,正如我所说,在此之后将建立连接,因此不会有减速。首先,虽然初始连接速度很重要,但浏览站点也非常重要,在这里您不应受到 100 毫秒减速的影响。

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

但是,我可以建议的一些内容如下。这些可能会减少使用 https 的影响,但不会减少最初的 100 毫秒连接延迟:

  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 配置,因为随着发现新漏洞,该领域的情况不断变化。