Desempenho do Apache TLS (SSL)

1

Estamos executando um servidor dedicado bastante poderoso com um CPU Xeon, 32 GB de RAM e SSDs RAID rodando o Centos 6. No entanto, ainda estamos vendo o HTTPS adicionar mais de 100ms ao nosso tempo de download da página. Existe alguma coisa que podemos fazer para acelerar os 20ms?

Aqui estão as configurações do 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
    
por marcusds 21.01.2016 / 23:16

3 respostas

4

O HTTPS diminui o seu website apesar de todas as afirmações em contrário. Isso ocorre porque o cliente e o servidor precisam negociar as criptografias SSL / TLS antes que possam ser iniciadas. No entanto, após , a lentidão é insignificante para a maioria dos sites, e há enormes benefícios para o SSL.

Além disso, o padrão é http, para que alguém que insira isso em um site somente com https precise redirecionar para a versão https, o que levará a outra ida e volta.

100 ms na verdade não é uma lentidão tão ruim para a conexão inicial e, como eu digo, depois disso a conexão será estabelecida e, portanto, não haverá lentidão. Então, primeiro, embora a velocidade de conexão inicial seja importante, navegar por um site também é muito importante e aqui você não deve ser afetado pela lentidão de 100 ms.

Sua configuração SSL / TLS parece realmente muito boa, tanto em termos de segurança quanto de desempenho. Você está usando cifras e suítes modernas e velozes (embora seu conjunto de criptografia seja muito restritivo apenas para novos navegadores e, se isso for intencional, você também pode desativar TLSv1 e TLSv1.1), configure o SSL Caching (para salvar clientes renegociação de uma sessão SSL para cada conexão) e configuração de grampeamento SSL (para salvar o cliente uma pesquisa extra para verificar a validade do seu certificado).

No entanto, algumas coisas que posso sugerir estão abaixo. Isso pode reduzir o impacto do uso de https, mas não reduzirá o atraso inicial de conexão de 100 ms:

  1. Certifique-se de que o Keep-Alives esteja ativado para o servidor (deve ser por padrão, mas é melhor verificar novamente). Você deve garantir que não não verá o cabeçalho "Conexão: fechar" na resposta. Sem o Keep-Alives, o seu SSLCache é inútil.

  2. Aumente seu SSLSessionCacheTimeout de 300 segundos ou 5 minutos. Se em seu site e navegando em torno de você poderia facilmente ir para fora disso. Você já limitou o tamanho do seu SSLSessionCache, portanto, não há problema em aumentar esse tempo limite para algo maior.

  3. Implemente o HSTS para informar ao navegador que seu site sempre prefere https (mesmo se o usuário não inserir nenhum protocolo na barra de endereços do navegador - ou mesmo se digitar http). Isso salvará o redirecionamento inicial.

  4. O
  5. HTTP / 2 ajudará com a velocidade de conexão https, já que você não pode usar conexões paralelas para isso, mas, mais importante, ajudará o desempenho de outras maneiras. Ainda é experimental para o Apache (embora pareça estável o suficiente para mim).

Também aconselho que você execute regularmente o seu servidor através do link para testar sua configuração SSL / TLS como coisas constantemente mudar neste espaço como novas vulnerabilidades são encontradas.

    
por 23.01.2016 / 14:42
1

Você pode ativar o HTTP / 2, o que reduzirá o número de conexões para navegadores compatíveis, reduzindo o tempo de carregamento da página. Isso não reduzirá a latência dessa conexão. Demonstração aqui .

Veja também esta questão - a latência é fundamental nessa situação. Eu fiz um teste de velocidade contra o meu servidor https em Sydney, na Austrália. Testando a partir de outro servidor de Sydney, o handshake SSL é de 46ms, do EC2 nos EUA é de 213ms. A diferença é por causa do tempo de pacote de ida e volta, além de haver alguma sobrecarga inevitável mesmo se a latência for zero. Eu não sei o que é essa latência obrigatória, mas você provavelmente poderia descobrir por experimentação.

Você fez seu teste de um cliente próximo ao seu servidor ou longe - qual é o ping? Outra página útil em torno do handshake https. 100 ms provavelmente não é tão ruim quanto uma sobrecarga para https.

Pode haver ajustes no Apache que alguém possa recomendar. Se você postar o link do seu site, alguém poderia dar uma olhada.

    
por 21.01.2016 / 23:30
0

Esta não é uma grande resposta, mas se você estiver disposto a aprender como o SSL funciona antes de otimizá-lo, aqui está uma lista de verificação para HTTPS rápido :

  • Certificado ECDSA
  • Origem de entropia
  • Protocolo TLS1.2
  • ciphersuites suportados por hardware: AES-NI
  • cache de sessão SSL
  • Grampeamento OCSP
  • HTTP / 2

Todo o meu conhecimento relacionado ao servidor é publicado neste repositório link

Tudo de bom!

    
por 28.03.2017 / 03:34