使用Nginx提高SSL性能

我们在我们的系统前面有Nginx,我们在后面代理Apache。 我们使用SSL / TLS进行连接。

题:

  1. 性能/ SSL握手方面,Nginx是否是终止SSL / TLS连接的最佳select?
  2. 我是否在做所有需要的性能调整? 我还能改善我的代码吗?

这是我的configuration:

ssl_certificate /path/ssl.crt; ssl_certificate_key /path/ssl.key; ssl_dhparam /path/dh.pem; ssl_buffer_size 4k; ssl_session_timeout 4h; ssl_session_cache shared:SSL:20m; ssl_session_tickets on; ssl_trusted_certificate /path/trust.crt; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; 

我使用Mozilla SSLconfiguration生成器在下面生成我的密码。

 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; ssl_prefer_server_ciphers on; 

密码是为了适应大多数的浏览器。 我也有严格的运输安全设置。

我们的系统使用CloudFront在Amazon AWS上运行。 目前需要大约130秒的SSL实验室才能进行testing。 Pingdom显示一个请求SSL连接需要至less220ms

谢谢!

    我在nginx和incapsula中遇到了一些性能问题,我发现问题与使用的密码有关。 Incapsula与DHE-RSA-AES128-SHA连接,导致服务器的性能和负载较低。 我使用https://wiki.mozilla.org/Security/Server_Side_TLS中的“中级列表”,并使用密码做了一些压力testing,并得到了这些工作的结果:

     Cipher Worst response time DHE-RSA-AES128-SHA 15.745s DHE-RSA-AES256-SHA 15.271s AES128-SHA 1.421s AES256-SHA 1.765s DES-CBC3-SHA 1.459s 

    所以,你可以看到,DHE- *工作不好,但AES128-SHA工作正常。 所以,如果你认为你有性能问题,build立一个数百或数千个连接的压力testing,并configurationNginx只使用一个密码。 你应该能够看到是否有任何密码正在工作,并尝试禁用它(不要忘记testing对客户的最终设置,或使用ssllabstesting ,看看你是不是阻止你的用户)

    其他几个选项: – 使用CloudFront终止SSL ,使用http调用您的服务器。 请求是通过AWSnetworking传输的,可能比公共互联网更安全,但如果您有个人或财务数据,则可能不希望这样做。 – 在ELB上终止SSL ,使用HTTP调用您的服务器。 这是在您的VPC和一个地区,所以数据是通过较less的链接。 再一次,这可能不是理想的取决于你的数据。

    现在,您可以在CloudFront上终止SSL,CloudFront会在边缘位置和原始服务器之间设置另一个SSL会话。 这可能是双SSL,增加了延迟,可能是问题的根源。 这将解释为什么你的努力没有像你期望的那样成功。