И снова об OpenSSL, TLS, ciphersuites

Месяц без очередной уязвимости в SSL\TLS уже считается моветоном. В очередной раз надо обновлять библиотеки, клиентов, сервера, прошивки, конфиги… С одной стороны эта борьба с ветряными мельницами вгоняет в тоску, но с другой ощущаешь себя нужным когда вокруг столько интересного :)
Инет забит постами на темы “как правильно настроить OpenSSL” и перепостами портянок ciphersuites для веб-серверов. Глянешь на них и такая тоска берет – к чему все эти “многабукав” в конфигах? Неужели нельзя как-то удобоваримо и читаемо сделать? За всё нужно браться самому…
Посмотрим что нужно прописать в ciphersuites в контексте веб-сервера, который не входит в топ-100 инета и не требуется 100%я совместимость со всеми маргиналами и некромантами-оккультистами 6го IE. Все станет намного проще если сначала подумать что нужно, а потом настраивать, а не наоборот. Немного подумав, я пришел к очень лаконичной записи ssl_ciphers для веб-сервера – ‘AESGCM+AES128:AES128:+SHA1:AES256:!aNULL’. А как же все эти портянки параметров бродящие по постам? Ну… Необходимого и достаточного условия никто не отменял – то же самое можно расписать и перечислив все комбинации шифров один за одним и прописав в исключения все нежелательные – результат будет одинаковый.

С учётом недавней узвимости Logjam, необходимо сгенерировать индивидуальные модули Diffie–Hellman длинной 2048 бит.
[shell
openssl dhparam -out /usr/local/etc/ssl/dh2048.pem
[/shell

И внести изменения в конфигурационный файл nginx /usr/local/etc/nginx/default.conf

А теперь подробнее.

По шифрам.
Из актуального пакета OpenSSL (или его сателитов) для рядового web-сервера фактически есть только 1 (один!) шифр который на сегодняшний день формально считается безопасным и широко совместимым – AES. Всё остальное отпадает автоматом – либо не безопасно (RC2, RC4, DES), либо сомнительно (Camellia, 3DES), либо есть проблемы с совместимостью (GOST, chacha). Так что настройка ciphersuites по сути сводится к прописыванию одного шифра – AES, его вариантов и параметров аутентификации и дайджеста. Что касается размера ключа AES-128 и AES-256, приоритетным будет использование AES-128, т.к. конкретных преимуществ в криптостойкости AES-256 не представленно и увеличении вычислительной нагрузки не оправдано.

По дайджесту.
Самой актуальной и безопасной считается реализация AES в режиме GCM (Galios/Counter Mode). В такой реализации автоматически снимается вопрос о дайджесте, т.к. аутентичность заложена в самой основе режима GCM.
Следующем по приоритету будет использование дайджест-алгоритмов SHA256 и SHA1 для совместимости.

По аутентификации:
Тут все просто – в порядке приоритетности использование PFS что обеспечивается протоколом обмена ключами Diffie–Hellman с эфемерными ключами, классического или с использованием эллиптических кривых. Аутентификация без PFS остается для совместимости. Прочие методы типа SRP и PSK для веб-сервера не актуальны.


Если разобрать строку параметров ‘AESGCM+AES128:AES128:+SHA1:AES256:!aNULL':
1) AESGCM+AES128 – включается набор шифров с использованием AES в режиме GCM и длинной ключа 128 бит во всех доступных режимах аутентификации.
2) AES128 – добавляются остальные комбинации с использованием шифра AES-128
3) в наборе из предыдущего пункта варианты с дайджестом SHA1 перемещаются в конец
4) AES256 – добавляются все возможные комбинации с шифром AES256 (для параноиков-максималистов)
5) из всего полученного набора исключаются комбинации без использования аутентификации

Собственно набор получившихся шифров можно посмотреть командой:

AESGCM+AES128:AES128:+SHA1:AES256:!aNULL

В выводе есть наборы с атентификацией PSK и SRP, но для веб-сервера с обычным сертификатом они использоваться не будут.
С такими настройками веб-сервер получает оценку А в тесте https://www.ssllabs.com/. По совместимости
не поддерживается только IE под WinXP, но не очень то и хотелось.
Для не веб-серверов принцип тот же, включаем то что нужно, выключаем то что не нужно :)
Ждем новых новостей по уязвимостям SSL/TLS.

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

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

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">