Nginx. Настройка SSL.

Один из клиентов настоял на том, что бы при настройке сервера, тесты на SSLLabs проходили бы на все 100% при рейтинге A+. На сервере установлен Nginx и панель VestaCP с помощью которой происходит работа с сертификатами от Let’s Encrypt (впрочем, настройка актуальна и для других конфигураций). Для достижения такого рейтинга необходимо сделать следующее:

1. Генерируем новый Diffie-Hellman (DHE) и подключаем его в конфиге Nginx:

# cd /etc/ssl/certs
# openssl dhparam -out dhparam.pem 4096
...
 ssl_dhparam /etc/ssl/certs/dhparam.pem;
...

2. Для того что бы пройти тесты на 100% нам нужно оставить в работе только актуальные версии шифров и протокола. Так же, не забываем включить ssl_prefer_server_ciphers, если пакете нашего дистрибутива он уже не включен заранее:

...
 ssl_protocols TLSv1.2;
 ssl_prefer_server_ciphers on;
 ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;
...

И вот здесь есть очень важный момент. Да, такой радикальный подход даёт возможность получения циферки в 100% на тестах ssllabs, однако при такой настройке мы сразу же отсекаем возможность работать с сайтом посетителям с устаревшими браузерами. Например пользователи IE версии 11 и ниже, Safari версии 6 и ниже, Android версии 4.3 и ниже уже не смогут попасть к нам на сайт по https.

Обязательно нужно оценить этот риск потери части пользователей и подумать, так ли важно набрать эти пресловутые 100% в тесте. Если 100% не критичны, то можно рассмотреть вот такой вот вариант набора шифров и протоколов:

...
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:RSA+3DES:!NULL:!RC4;
...

Либо и вовсе вот так:

...
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4;
...

3. Выберем и укажем кривую для OpenSSL:

...
 ssl_ecdh_curve secp384r1;
...

4. Укажем тип и размер кеша для хранения сессий, зададим время, в течение которого клиент сможет повторно использовать параметры сессии:

...
 ssl_session_cache shared:SSL:10m;
 ssl_session_timeout 10m;
...

5. Настраиваем HSTS:

...
 add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; ";
...

Позже, когда всё будет проверено, и мы убедимся что всё работает хорошо, можно добавить сайт в hsts preload list.

С приведёнными выше настройками, на SSLLabs мы получаем рейтинг А+, 100% прохождение всех тестов и вместе с этим повышаем уровень безопасности при работе по ssl с сервером. Однако это далеко не всё что можно сделать в процессе настройки веб-сервера. О других полезных параметрах поговорим отдельно, в дальнейших заметках.

@SysadminNotes | https://sysadmin.pm

One thought on “Nginx. Настройка SSL.

  1. Информация к маю 2020 уже устарела.
    Требования все повышаются и сейчас при наличии включеного TLSv1 тест уже не пройти.
    Потому как TLSv1 обьявлен не безопастным и его требуют выключить.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *