Négociation de négociation SSL sur Nginx terriblement lente


17

J'utilise Nginx comme proxy pour 4 instances Apache. Mon problème est que la négociation SSL prend beaucoup de temps (600 ms). Voir ceci comme exemple: http://www.webpagetest.org/result/101020_8JXS/1/details/

Voici ma Nginx Conf:

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;

    }

}

La machine est un VPS sur Linode avec 1 G de RAM. Quelqu'un peut-il dire pourquoi la poignée de main SSL prend du temps?

Réponses:


11

Vous devez désactiver le chiffrement "diffie-hellman éphémère". Les navigateurs ne les utilisent pas de toute façon, mais openSSL le sera lorsqu'il sera utilisé avec des outils comme cURL ou apachebench. Je parie donc que webpagetest.org les utilise.

Voir ce fil pour plus de détails.

J'utilise personnellement ces paramètres dans nginx pour forcer les chiffrements SSL les plus rapides mais toujours sécurisés en fonction des préférences du serveur, et non des navigateurs:

Mise à jour 2014-01-13: ces conseils ont changé compte tenu des récentes attaques contre RC4, des mises à jour du navigateur qui protègent contre BEAST et de la disponibilité plus répandue de TLS v1.2 sur les clients et les serveurs.

Mise à jour 2015-10-16: paramètres TLS nginx actuels 2015-10-16 comme recommandé par CloudFlare . Veuillez vérifier le lien précédent pour les mises à jour, car TLSv1 sera probablement supprimé de la configuration recommandée à un moment donné. Les paramètres actuels désactivent SSLv3 et RC4 conformément aux meilleures pratiques actuelles et à la dernière norme PCI-DSS à compter de cette date.

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;

Cela annule et remplace l'avis précédent de cette réponse, qui a été supprimé pour éviter toute confusion.


RC4 n'est pas sûr et ne convient pas à l'utilisation dans TLS. "Alors que l'algorithme RC4 est connu pour avoir une variété de faiblesses cryptographiques (voir [26] pour une excellente enquête), il n'a pas été précédemment exploré comment ces faiblesses peuvent être exploitées dans le contexte de TLS. Ici, nous montrons que nouvelles et récentes les biais découverts dans le flux de clés RC4 créent de graves vulnérabilités dans TLS lors de l'utilisation de RC4 comme algorithme de chiffrement. " Voir Sur la sécurité de RC4 dans TLS et WPA .

2
@noloader que l'attaque Rc4 a été annoncée des années après mon message; jusqu'à très récemment, la plupart des cryptographes recommandaient RC4 sur AES en raison de l'attaque BEAST contre TLS v1.0 et antérieures. Maintenant que la plupart des navigateurs protègent contre le client BEAST et qu'il y a eu de nouvelles attaques contre RC4, les conseils ont changé. Voir cet article pour quelques bons paramètres nginx pour TLS v1.2: blog.cloudflare.com/staying-on-top-of-tls-attacks
rmalayter

Oh mon! Désolé pour ça. Je n'ai pas pensé à vérifier les dates. Pardon.

5

Vous n'avez peut-être pas une bonne source d'entropie. /dev/urandomExiste- t- il? Sinon, Nginx bloquera la lecture /dev/random.

Quelle est la taille de votre clé? Plus long est plus lent.

Essayer straceles processus pour voir ce qu'ils font.


+1 Semble être une bonne possibilité car l'urandom manque souvent sur les VPS
Kyle Brandt

1

vérifiez que vous n'attendez pas la résolution DNS quelque part.


0

Changement

ssl_protocols  SSLv2 SSLv3 TLSv1;

à

ssl_protocols  SSLv3 TLSv1 SSLv2;

Essaie les protocoles dans l'ordre dans lequel ils sont répertoriés.


Ça n'a pas vraiment aidé. Voir webpagetest.org/result/101020_8KVR/1/details - la négociation prend toujours> 50% du temps.
Paras Chopra

2
SSLv2 ne doit PAS être utilisé, il n'est pas sécurisé. Au moment de ce commentaire, tous les principaux navigateurs devraient prendre en charge TLSv1, de sorte que SSLv3 ne devrait plus être nécessaire également. (idéalement, ce devrait être TLSv1 TLSv1.1 TLSv1.2 jusqu'à ce que la plupart des navigateurs adoptent 1.1).
KBeezie
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.