Дата статьи 01.12.2014

Настройка прямой секретности на Apache, Nginx и OpenSSL

В нашей предыдущей статье мы вкратце описали особенности режима прогрессивной (прямой) секретности (forward secrecy) и упомянули некоторые моменты его настройки. Если Вы только знакомитесь с понятием прямой секретности, мы рекомендуем сначала прочитать тот пост. В этой же статье мы детально расскажем об особенностях конфигурации Apache, Nginx и OpenSSL под режим прямой секретности.

Программные требования для настройки прямой секретности

Чтобы реализовать режим прямой секретности (forward secrecy), нужен собственный веб-сервер с SSL/TLS библиотекой, совместимой с криптосистемой на эллиптических кривых (Elliptic Curve Cryptography, ECDHE). Подойдут следующие версии Apache, Nginx, и OpenSSL:
  • OpenSSL версии 1.0.1c и выше
  • Apache версии 2.4.x
  • nginx версий 1.0.6+ и 1.1.0 и выше
Системы рекомендуется обновить до последних версий, чтобы не подвергаться ненужному риску по причине устаревших, неподдерживаемых программных средств. Как известно, Linux выпускается в дистрибутивах с изменениями. Как правило, это изменения в лучшую сторону, но бывает, что в новых версиях удаляются некоторые функции. Так, системы Red Hat последних версий несовместимы с криптосистемой на эллиптических кривых по причине проблем с патентами. Тогда как, если Вы используете систему CentOS, для реализации прогрессивной секретности, Вам придется перекомпилировать ключевые пакеты, включив поддержку эллиптических кривых. В Интернете можно найти большое количество инструкций, как это сделать. После того, как нужные пакеты были установлены, необходимо сделать следующее:
  1. Настроить сервер на автоматический выбор наборов шифров.
  2. Активировать правильную строку конфигурации наборов шифров OpenSSL.
Нижеприведенные инструкции по настройке систем следует использовать только когда используются совместимые программные средства из раздела выше. В противном случае, прогрессивная секретность не будет совместима с системой.

Конфигурация прямой секретности на Apache

Конфигурация системы Apache должна иметь следующие строки:
SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"

Прямая секретность на Nginx

В случае с Nginx нужно иметь следующие строки конфигурации:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";

RC4 против BEAST

Сегодня только протокол TLS 1.2 со шифрами счетчика/Галуа (режим GCM) обеспечивает достаточно крепкую защиту. Все другие наборы шифров известны теми или иными уязвимостями (смотрите: RC4, Lucky 13, BEAST), и большинство из них очень сложны в управлении. Поскольку наборы шифров GCM сегодня имеют ограниченную совместимость, весь обмен данными сегодня защищается с помощью уязвимых шифров, упомянутых выше. По правде говоря, когда речь идет об общедоступном веб-сайте, более высокий уровень безопасности в принципе невозможен. Единственный выход в сегодняшней ситуации — это стараться возлагать задачу на потоковый шифр RC4. Тогда Вам не страшна атака BEAST, хотя при этом Вы открыты атакам на шифр RC4. С другой стороны, если отказаться от RC4, Ваша система будет уязвима перед атакой BEAST, но такая возможность минимальна. Так как риск в обоих случаях довольно малый, выбор в пользу того или иного метода сделать сложно. Однако сегодня просматривается четкая тенденция: чем далее, тем атаки на шифр RC4 становятся более изощренными, количество же атак BEAST уменьшается.

Настройка прямой секретности на OpenSSL (с RC4)

Этот вариант подойдет, если Вы хотите реализовать режим прогрессивной секретности при максимально возможном уровне безопасности и если Вы предпочитаете шифры GCM (устойчивые к таймерным атакам) и шифры RC4 (устойчивые к атакам BEAST). Чтобы максимально ускорить систему, используйте шифры ECDHE, насколько это возможно.
EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS $ openssl ciphers -V 'EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA256 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EDH+aRSA EECDH RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS'
В итоге у Вас должно получиться что-то вроде этого:
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384 ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA256 ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384 ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256 ECDHE-RSA-RC4-SHA SSLv3 Kx=ECDH Au=RSA Enc=RC4(128) Mac=SHA1 ECDHE-RSA-AES256-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA1 ECDHE-ECDSA-AES256-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA1 ECDHE-RSA-AES128-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA1 ECDHE-ECDSA-AES128-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA1 ECDHE-ECDSA-RC4-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=RC4(128) Mac=SHA1 DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256 DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1 DHE-RSA-CAMELLIA256-SHA SSLv3 Kx=DH Au=RSA Enc=Camellia(256) Mac=SHA1 DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(128) Mac=AEAD DHE-RSA-AES128-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(128) Mac=SHA256 DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1 DHE-RSA-SEED-SHA SSLv3 Kx=DH Au=RSA Enc=SEED(128) Mac=SHA1 DHE-RSA-CAMELLIA128-SHA SSLv3 Kx=DH Au=RSA Enc=Camellia(128) Mac=SHA1 ECDH-RSA-RC4-SHA SSLv3 Kx=ECDH/RSA Au=ECDH Enc=RC4(128) Mac=SHA1 ECDH-ECDSA-RC4-SHA SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=RC4(128) Mac=SHA1 RC4-SHA SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=SHA1
Если Вы запустите систему с этой конфигурацией, тест SSL Lab должен выдать результаты такие как здесь. Примечания:
  • Сильные наборы шифров TLS 1.2 должны быть в начале списка.
  • Шифры ECDSA должны иметь приоритет перед шифрами RSA, что поднимет производительность системы при сценарии запуска с двумя сертификатами (RSA+ECDSA).
  • Два основных набора шифров (для современных браузеров, большинство которых несовместимы с TLS 1.2) — ECDHE-RSA-RC4-SHA и ECDHE-ECDSA-RC4-SHA, для сертификатов RSA и ECDSA соответственно.
  • Шифры DHE следует использовать в тех редких случаях, когда старые браузеры не поддерживают ECDHE. Opera версии 15 и ниже и Firefox дистрибутива для систем Red Hat — примеры таких браузеров. Эти шифры медленней, но большинство браузеров предложат более быстрые ECDHE.
  • В конце концов, есть алгоритм RC4-SHA, который будет совместим с IE8 и, возможно, IE6 на Windows XP.

Известные проблемы:

  • У Internet Explorer всех версий отсутствует поддержка комбинации шифров ECDHE и RC4, преимущество которой в ее совместимости с режимом прогрессивной секретности и в устойчивости к атакам BEAST, но в IE давно интегрирован патч против BEAST, так что на этот счет можно не беспокоится.
  • Примечание выше также применимо к Firefox и системам Red Hat.
  • В IE8 на базе Windows XP отсутствует поддержка прогрессивной секретности, так как браузер несовместим с нужными наборами шифров. Тоже самое, наверное, можно сказать вообще обо всех версиях IE на Windows XP. Мы советуем не квитироваться с этими браузерами — добавьте !RC4-SHA в конфигурацию.

Настройка прямой секретности на OpenSSL (без RC4)

Если Вы выбрали вариант запуска без шифров RC4, используйте следующую конфигурацию:
EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4
В принципе, можно включить RC4 (чтобы обеспечить максимальную совместимость со всеми возможными браузерами, в том числе всеми версиями IE на базе Windows XP), но использовать их только в самых крайних случаях:
EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS +RC4 RC4

Последние замечания по forward secrecy

В качестве последнего напутствия:
  • Клиентских систем на базе сертификатов SSL/TLS великое множество и практически в каждой реализован уникальный набор шифров, поэтому невозможно гарантировать совместимость абсолютно с каждой клиентской системой.
  • Симулятор квитирования, доступный на SSL Labs test, — очень полезный инструмент, который поможет Вам выбрать набор шифров. Существует поддержка большого количества браузеров, включая браузеры старых версий. Хотя в данный момент поддержка мобильных устройств только ограниченная.
Войти Регистрация
Корзина 0 позиций
на сумму 0 ₽
Связаться со мной
Отправить
Отправляя форму Вы автоматически подтверждаете, что ознакомились и принимаете Политику конфиденциальности сайта
Оформить заказ
Заказать
Отправляя форму Вы автоматически подтверждаете, что ознакомились и принимаете Политику конфиденциальности сайта
Сообщение отправлено!
Спасибо за обращение! Мы свяжемся с Вами в ближайшие рабочие часы
Отправка не удалась
Во время отправки запроса произошла ошибка. Пожалуйста, подождите и попробуйте снова через некоторое время или позвоните на мой номер телефона
Авторизация
Отправляя форму Вы автоматически подтверждаете, что ознакомились и принимаете Политику конфиденциальности сайта
Забыли пароль?
\
Регистрация
Восстановление пароля
Отправляя форму Вы автоматически подтверждаете, что ознакомились и принимаете Политику конфиденциальности сайта
Авторизация
\
Регистрация
Ошибка авторизации
Пожалуйста, проверьте корректность данных.
Форма будет автоматически закрыта через 5 секунд
Успешная авторизация
Через 5 секунд страница будет перезагружена и вы сможете войти в свой аккаунт
Ошибка регистрации
Пожалуйста, проверьте корректность данных.
Форма будет автоматически закрыта через 5 секунд
Успешная регистрация
Вам на почту должно прийти письмо с ссылкой на подтверждение аккаунта. Пожалуйста перейдите по ней и активируйте свой аккаунт
Ошибка регистрации
Такой пользователь уже существует. Пожалуйста, проверьте корректность данных.
Регистрация
Ошибка восстановления пароля
Пожалуйста, проверьте корректность email.
Успех
Ваш новый пароль был выслан вам на email
Регистрация
Отправляя форму Вы автоматически подтверждаете, что ознакомились и принимаете Политику конфиденциальности сайта
Авторизация
Создать тикет
Отправляя форму Вы автоматически подтверждаете, что ознакомились и принимаете Политику конфиденциальности сайта
Свяжитесь с нами
Отправляя форму Вы автоматически подтверждаете, что ознакомились и принимаете Политику конфиденциальности сайта
Сообщение отправлено!
Ваше сообщение получено. Наш менеджер свяжется с вами в ближайшие рабочие часы
Проверка DNS валидации
Скачать файл валидации
Для валидации домена разместите скачанный текстовый файл в указанную директорию на Вашем сервере:
Выберите подходящий вариант

К сожалению, выбранный сертификат от данного центра сертификации не может быть выдан. Так как ЦС приостановил выпуск новых/продление заказов для доменов в зоне .ru, .рф, .by, .su, .moscow и для сертификатов с OV, EV проверкой, где фигурирует компания из России.

Пожалуйста рассмотрите возможность выпуска сертификатов от AlphaSSL или Globalsign.