Один из клиентов настоял на том, что бы при настройке сервера, тесты на 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 с сервером. Однако это далеко не всё что можно сделать в процессе настройки веб-сервера. О других полезных параметрах поговорим отдельно, в дальнейших заметках.
Информация к маю 2020 уже устарела.
Требования все повышаются и сейчас при наличии включеного TLSv1 тест уже не пройти.
Потому как TLSv1 обьявлен не безопастным и его требуют выключить.