support@emaro-ssl.ru техническая поддержка
8 800 555 14 99 звонок по РФ бесплатно
8 800 555 14 99 звонок по РФ бесплатно
Permalink

0

Настройка прямой секретности на 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, — очень полезный инструмент, который поможет Вам выбрать набор шифров. Существует поддержка большого количества браузеров, включая браузеры старых версий. Хотя в данный момент поддержка мобильных устройств только ограниченная.
Купить SSL сертификат
Обеспечьте защиту передаваемых данных при помощи SSL сертификата

Настройка прямой секретности на Apache, Nginx и OpenSSL
4.3 (85.71%) Всего оценок: 7

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

Обязательные поля отмечены *.


2 + 1 =