Apache TLS(SSL)性能

我们正在运行一个function非常强大的专用服务器,其中包括运行Centos 6的Xeon CPU,32GB RAM和RAID SSD。但是,我们仍然看到HTTPS在我们的页面下载时间内添加了超过100毫秒的时间。 有什么我们可以做甚至加速20ms?

这里是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 

尽pipe有相反的说法,但HTTPS确实会降低网站速度。 这是因为客户端和服务器在启动之前需要协商SSL / TLS密码。 然而之后 ,大多数网站的减速可以忽略不计,SSL也有很大的好处。

此外,默认值为http,因此某个仅inputhttps的站点的用户需要redirect到导致另一次往返的https版本。

实际上,100ms对于初始连接来说并不是那么糟糕,正如我所说的那样,连接build立之后就不会有任何的减速。 所以首先,尽pipe初始连接速度很重要,浏览网站也是非常重要的,在这里你不应该受到100毫秒减速的影响。

实际上,SSL / TLSconfiguration在安全性和性能方面看起来相当不错。 您正在使用现代和快速的密码和套件(尽pipe您的密码套件仅限于新浏览器,如果这是故意的,那么您也可以closuresTLSv1和TLSv1.1),设置SSLcaching(以保存客户端为每个连接重新协商一个SSL会话)以及设置SSL Stapling(保存客户端的额外查找来检查证书的有效性)。

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

  1. 确保服务器上的Keep-Alives已打开(应为默认值,但最好仔细检查)。 您应该确保在响应中没有看到“Connection:close”标题。 没有保持你的SSLCache是​​毫无意义的。

  2. 将您的SSLSessionCacheTimeout从300秒或5分钟。 如果在您的网站上浏览,您可以轻松地到外面去。 你已经限制了你的SSLSessionCache的大小,所以不要把这个超时提高到更高的地步。

  3. 实施HSTS来告诉浏览器,你的网站总是倾向于使用https(即使用户在他们的浏览器地址栏中没有input任何协议 – 甚至是inputhttp)。 这将保存最初的redirect。

  4. HTTP / 2将有助于提高https的连接速度,因为你并不孤独地使用并行连接,但更重要的是,将以其他方式提高性能。 虽然对于Apache来说,它仍然是实验性的(尽pipe对我来说似乎足够稳定)。

我还build议您定期通过https://www.ssllabs.com/ssltest/index.html运行您的服务器,以testing您的SSL / TLSconfiguration,因为在发现新的漏洞的情况下,这些空间会不断变化。

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

另请参阅此问题 – 延迟是这种情况下的关键。 我在澳大利亚的悉尼对我的https服务器进行了速度testing。 从另一个悉尼服务器testingSSL握手是46ms,从美国的EC2是213ms。 不同之处在于往返数据包时间,加上即使延迟为零也有一些不可避免的开销。 我不知道这个强制延迟是什么,但是你可以通过实验来解决这个问题。

你有没有从你的服务器附近的客户端进行testing,或者很远 – 平台是什么? 围绕https握手的另一个有用的页面 。 100ms可能不会像https的开销那样糟糕。

有人可以推荐Apache的调整。 如果您发布您的网站链接有人可以看看。

这不是一个很好的答案,但是如果你愿意学习如何SSL优化之前工作,这里是一个快速的HTTPS清单

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

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

祝一切顺利!