Melhore o desempenho do SSL com o Nginx

5

Temos o Nginx na frente do nosso sistema e o Proxy para o Apache na parte de trás. Usamos SSL / TLS para nossa conexão.

Pergunta:

  1. O Nginx é a melhor opção para encerrar conexões SSL / TLS em termos de desempenho / handshake SSL?
  2. Estou fazendo todos os ajustes de desempenho necessários? Ainda posso melhorar meu código?

Aqui está minha configuração:

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;

Eu uso o Gerador de Configuração SSL da Mozilla para gerar minhas cifras abaixo.

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;

A cifra era para acomodar a maioria dos navegadores. Eu também tenho o conjunto Strict-Transport-Security .

Nosso sistema é executado no Amazon AWS com o CloudFront. Atualmente, o SSL Labs leva cerca de 130 segundos para executar um teste. E a Pingdom mostra que a conexão SSL para uma solicitação leva pelo menos 220ms .

Obrigado!

    
por jarvis 15.04.2016 / 02:00

2 respostas

1

Eu tive alguns problemas de desempenho no nginx e na capsula e descobri que o problema estava relacionado com a cifra usada. O Incapsula estava se conectando com o DHE-RSA-AES128-SHA e isso proporcionava baixo desempenho e alta carga no servidor. Eu uso a "Lista Intermediária" no link e fiz alguns testes de estresse com as cifras e obtive esses resultados para os que trabalharam :

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

Então, como você pode ver, o DHE- * está funcionando mal, mas o AES128-SHA está funcionando bem. Portanto, se você acha que tem problemas de desempenho, faça um teste de estresse com algumas centenas ou milhares de conexões e configure o nginx para usar apenas uma cifra. você deve ser capaz de ver se alguma cifra está trabalhando com sucesso e tentar desabilitá-la (não se esqueça de testar a configuração final com seus clientes, ou use teste ssllabs para ver se você não está bloqueando seus usuários)

    
por 13.09.2016 / 22:35
0

Algumas outras opções:  - Encerre o SSL usando o CloudFront , ligue para seus servidores usando http. As solicitações estão viajando pela rede da AWS, o que provavelmente é mais seguro do que a Internet pública, mas você pode não querer fazer isso se tiver dados pessoais ou financeiros.  - Encerrar SSL no ELB , ligue para seus servidores usando HTTP . Isso está dentro da sua VPC e de uma região, portanto, os dados estão passando por menos links. Mais uma vez, pode não ser ideal dependendo dos seus dados.

Neste momento, você pode finalizar o SSL no CloudFront, com o CloudFront configurando outra sessão SSL entre a sua localização de ponta e o servidor de origem. Isso poderia ser SSL duplo, aumentando sua latência e poderia ser a causa raiz do problema. Isso explicaria por que seus esforços não foram tão bem-sucedidos quanto o esperado.

    
por 13.09.2016 / 22:49