
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 são enviados em ambas as solicitaçõ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?
Responder1
Como você comparou seu servidor? Qual aplicativo está sendo executado atrás do seu servidor HTTPS? Qual CPU seu servidor usa? Como você pode ver, faltam muitos detalhes importantes em sua pergunta ...
De qualquer forma, o SSL certamente é um pouco mais lento que o HTTP "puro": a criptografia de chave pública é muito mais lenta 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 muda para simétrica criptografia de chave.
Responder2
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á a diferença de tempo. A configuração do TLS leva mais tempo do que nenhuma configuração.
Responder3
Você precisa perceber a diferença entre o que ab
faz e o que um navegador faz. (Não vou responder o que ab
acontece, porque não estou familiarizado o suficiente com isso).
Por exemplo:
- O uso da sessão TLS é
ab
reutilizado? Um navegador teria um desempenho muito mais rápido por causa disso (para solicitações subsequentes). Você pode verificar isso com o wireshark (talvezhttps://ask.wireshark.org/questions/9007/ssl-session-reuseé útil) - Está
ab
usando cifras que são conhecidas por serem lentas (você pode ver qual cifra é negociada no ssl_request_log) - Você oferece suporte ao keep-alive HTTP na conexão HTTPS? Você deveria fazer isso, mesmo que seja por tempo suficiente para extrair todos os ativos de uma página. Isso realmente reduzirá o número de solicitações SSL/TLS feitas ao servidor.
- Você tem conteúdo compatível com cache em seu site (especialmente para o cache do navegador)? Você está usando cabeçalhos de resposta como
Cache-Control: public, max-age=3600, s-max-age=3600
.
Se você se concentrar nisso, poderá facilmente fazer com que um site somente HTTPS funcione de maneira agradável e rápida. Isso é o que faço para um site de streaming de vídeo que é (efetivamente) apenas HTTPS e não precisei me preocupar com tempos de conexão SSL.
Responder4
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 do OCSP e da CRL também não é corrigido, pois um site leva 1/3 de segundo para responder a uma solicitação OCSP e estabelecer uma conexão.
Recomendações para conexões HTTPS rápidas:
A utilização dos recursos da CPU pode ser mitigada pela compactação do conteúdo textual ou pela atualização do processo atual para lidar com a tarefa de criptografia.
Você precisa ter certeza de que tudo na página foi recuperado por HTTPS.
Peça ajuda deSPDY- um protocolo de rede de código aberto do Google que minimiza o tempo de carregamento da página web.
Do lado da autoridade de certificação, as CAs podemreduza o tempo de resposta OCSP e CRLde 300ms a 100ms (milissegundos).
A CA pode reduzir o tamanho da cadeia intermediária em certificados SSL, pois consome bytes e tempo adicionais.