SSL Рукостискання переговорів щодо Nginx страшенно повільне


17

Я використовую Nginx в якості проксі-сервера для 4-х екземплярів apache. Моя проблема полягає в тому, що узгодження SSL займає багато часу (600 мс). Дивіться це як приклад: http://www.webpagetest.org/result/101020_8JXS/1/details/

Ось мій конфіденційність 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;

    }

}

Машина являє собою VPS на Linode з 1 G ОЗУ. Може хто-небудь скажіть, чому SSL-рукостискання займає віки?

Відповіді:


11

Потрібно вимкнути шифри "ефемерні дифі-пекелі". Веб-браузери не використовують їх у будь-якому випадку, але openSSL буде застосовуватися з такими інструментами, як CURL або apachebench. Тож я маю на те, що webpagetest.org використовує їх.

Дивіться цю тему для більш детальної інформації

Я особисто використовую ці налаштування в nginx, щоб примусити найшвидші, але все-таки захищені шифри SSL на основі переваг сервера, а не браузерів:

Оновлення 2014-01-13: Ця порада змінилася завдяки останнім атакам на RC4, оновленням браузера, які захищають від BEAST, та більш широкій доступності TLS v1.2 у клієнтах та серверах.

Оновлено 2015-10-16: поточні настройки nginx TLS 2015-10-16, як рекомендують CloudFlare . Будь ласка, перевірте попереднє посилання на наявність оновлень, оскільки TLSv1, можливо, буде видалено з рекомендованої конфігурації в якийсь момент. Поточні параметри вимикають SSLv3 та RC4 відповідно до поточної найкращої практики та останнього PCI-DSS станом на цю дату.

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;

Це витісняє попередню пораду в цій відповіді, яку було видалено, щоб уникнути сум'яття.


RC4 є небезпечним і не підходить для використання в TLS. "Хоча, як відомо, що алгоритм RC4 має різні криптографічні недоліки (див. [26] для відмінного опитування), раніше не було досліджено, як ці слабкі місця можна використовувати в контексті TLS. Тут ми показуємо, що нові та останнім часом виявлені упередження в ключовому потоці RC4 створюють серйозні вразливості в TLS при використанні RC4 в якості його алгоритму шифрування ". Див . Забезпечення RC4 у TLS та WPA .

2
@noloader про те, що атака Rc4 була оголошена через роки після моєї посади; до останнього часу більшість криптографів рекомендували RC4 над AES через атаку BEAST проти TLS v1.0 і раніше. Тепер, коли більшість браузерів захищають від клієнта BEAST, а також були наступні атаки на RC4, поради змінилися. Дивіться цю публікацію щодо гарних налаштувань nginx для TLS v1.2: blog.cloudflare.com/staying-on-top-of-tls-attacks
rmalayter

О Боже! Вибач за це. Я не думав перевіряти дати. Вибачте.

5

Можливо, у вас немає хорошого джерела ентропії. Чи /dev/urandomіснує? Якщо ні, то Nginx блокується при читанні /dev/random.

Який розмір вашого ключа? Довше - повільніше.

Спробуйте straceпроаналізувати процеси, щоб побачити, що вони роблять.


+1 Здається, хороша можливість, оскільки у ВПС часто не вистачає урандуму
Кайл Брандт,

1

переконайтеся, що ви десь не чекаєте роздільної здатності DNS


0

Зміна

ssl_protocols  SSLv2 SSLv3 TLSv1;

до

ssl_protocols  SSLv3 TLSv1 SSLv2;

Пробує протоколи в тому порядку, в якому вони перераховані.


Не дуже допомогло. Див. Webpagetest.org/result/101020_8KVR/1/details - переговори все ще займають> 50% всього часу.
Парас Чопра

2
SSLv2 НЕ слід використовувати, це небезпечно. На момент отримання цього коментаря всі основні веб-переглядачі повинні підтримувати TLSv1, тому SSLv3 більше не потрібен. (в ідеалі це повинно бути TLSv1 TLSv1.1 TLSv1.2, поки більшість браузерів не приймає 1.1).
KBeezie
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.