negociação SSL Handshake no Nginx terrivelmente lento

17

Estou usando o Nginx como um proxy para 4 instâncias do apache. Meu problema é que a negociação SSL leva muito tempo (600 ms). Veja isto como um exemplo: link

Aqui está o meu Conf Nginx:

user www-data;
worker_processes  4;


events {
    worker_connections 2048;
    use epoll;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    access_log  /var/log/nginx/access.log;
    sendfile        on;
    keepalive_timeout  0;
    tcp_nodelay        on;
    gzip  on;
    gzip_proxied any;
    server_names_hash_bucket_size 128;


}

upstream abc {
     server 1.1.1.1 weight=1;
     server 1.1.1.2 weight=1;
     server 1.1.1.3 weight=1;


 }


server {
    listen   443;
    server_name  blah;

    keepalive_timeout 5;

    ssl  on;
    ssl_certificate  /blah.crt;
    ssl_certificate_key  /blah.key;
    ssl_session_cache  shared:SSL:10m;
    ssl_session_timeout  5m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;

    location / { proxy_pass http://abc;

                 proxy_set_header X-Real-IP  $remote_addr;
                 proxy_set_header Host $host;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

}

A máquina é um VPS no Linode com 1 G de RAM. Alguém pode por favor dizer por que o SSL Hand shake está demorando?

    
por Paras Chopra 20.10.2010 / 21:03

4 respostas

11

Você precisa desabilitar as cifras "diffie-hellman efêmero". Os navegadores não os usam de qualquer maneira, mas o openSSL será usado quando usado com ferramentas como cURL ou apachebench. Então estou apostando que o webpagetest.org está usando-os.

Veja este tópico para mais detalhes.

Eu pessoalmente uso essas configurações no nginx para forçar as cifras SSL mais rápidas, mas ainda seguras, com base nas preferências do servidor, e não nos navegadores:

Atualização 2014-01-13: Este aviso foi alterado, considerando os recentes ataques ao RC4, as atualizações do navegador que protegem contra o BEAST e a disponibilidade mais ampla do TLS v1.2 em clientes e servidores.

Atualizado em 2015-10-16: configurações atuais do nginx TLS 2015-10-16 conforme recomendado por CloudFlare . Por favor, verifique o link anterior para atualizações, pois o TLSv1 provavelmente será removido da configuração recomendada em algum momento. As configurações atuais desabilitam SSLv3 e RC4 de acordo com as práticas recomendadas atuais e com o PCI-DSS mais recente a partir desta data.

ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers                 EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers   on;

Isso substitui o conselho anterior nesta resposta, que foi removido para evitar confusões.

    
por 18.08.2011 / 16:46
5

Você pode não ter uma boa fonte de entropia. O /dev/urandom existe? Se não, o Nginx irá bloquear a leitura de /dev/random .

Qual é o tamanho da sua chave? Mais tempo é mais lento.

Experimente strace ing os processos para ver o que eles estão fazendo.

    
por 20.10.2010 / 22:17
1

verifique se você não está esperando a resolução do DNS em algum lugar.

    
por 20.10.2010 / 22:51
0

Alterar

ssl_protocols  SSLv2 SSLv3 TLSv1;

para

ssl_protocols  SSLv3 TLSv1 SSLv2;

Tenta protocolos na ordem em que estão listados.

    
por 20.10.2010 / 14:28

Tags