Eu tenho um problema com um servidor Apache lento com certificado SSL de 256 bits
ab -n 500 https://example.com/
Time per request 29 ms
ab -n 500 http://example.com/
Time per request 10 ms
52 Bytes é enviado em ambas as requisições e os testes são feitos a partir de um servidor no mesmo datacenter
conf
SSLEngine on
SSLProtocol All -SSLv2
SSLHonorCipherOrder On
SSLCipherSuite ALL:!ADH:!EXP:!LOW:!RC2:!3DES:!SEED:!RC4:+HIGH:+MEDIUM
É normal que o SSL seja 3 vezes mais lento que as solicitações HTTP simples?
Como você comparou seu servidor? Qual aplicativo está sendo executado por trás do seu servidor HTTPS? Qual CPU seu servidor usa? Como você pode ver, sua pergunta carece de muitos detalhes importantes...
De qualquer forma, o SSL certamente é um pouco mais lento do que o HTTP "puro": a criptografia de chave pública é muito mais lenta do que a de chave simétrica, e esta é a razão pela qual o pubkey é usado apenas para trocar uma chave simétrica privada e o canal que muda para simétrico chave criptográfica.
O HTTPS é mais lento porque tem mais dados para trocar (o certificado X.509 do servidor), tem uma conexão de dados segura para configurar, ...
ab
pode dar tempo de 'Conectar' e é aí que você verá sua diferença de tempo. A configuração do TLS leva mais tempo do que nenhuma configuração.Você precisa perceber a diferença entre o que
ab
faz e o que um navegador faz. (não vou responder o queab
faz, porque não estou familiarizado o suficiente com isso).Por exemplo:
ab
uso da sessão TLS é reutilizado? Um navegador funcionaria e funcionaria muito mais rápido por causa disso (para solicitações subsequentes). Você pode verificar isso com wireshark (talvez https://ask.wireshark.org/questions/9007/ssl-session-reuse seja útil)ab
usando cifras conhecidas por serem lentas (você pode ver qual cifra é negociada no ssl_request_log)Cache-Control: public, max-age=3600, s-max-age=3600
.Se você se concentrar neles, poderá facilmente fazer com que um site somente HTTPS seja executado de maneira agradável e rápida. Isso é o que eu faço para um site de streaming de vídeo que é (efetivamente) apenas HTTPS e não tive que me preocupar com os tempos de conexão SSL.
Sim, é normal que o HTTPS seja aproximadamente 3 vezes mais lento ao estabelecer a conexão do que o HTTP. Aqui está uma boa leitura explicando o porquê .
Razões para lentidão do site:
Os certificados SSL carregam vários certificados intermediários que aumentam o volume de dados durante o handshake.
O desempenho de OCSP e CRL também não é corrigido, pois um site leva 1/3 de segundo para responder a uma solicitação de OCSP e estabelecer uma conexão.
Recomendações para conexões HTTPS rápidas:
A utilização dos recursos da CPU pode ser atenuada pela compactação do conteúdo textual ou atualização do processo atual para lidar com a tarefa de criptografia.
Você precisa garantir que tudo na página seja recuperado por HTTPS.
Obtenha a ajuda do SPDY - um protocolo de rede de código aberto do Google que minimiza o tempo de carregamento da página da web.
No lado da autoridade de certificação, as CAs podem reduzir o tempo de resposta de OCSP e CRL de 300ms para 100ms (milissegundos).
A CA pode reduzir o tamanho da cadeia intermediária em certificados SSL, pois consome bytes e tempo adicionais.