Наш опыт показывает, что современное использование протокола Diffie-Hellman не настолько надежное, как предполагалось ранее. В данной статье вы узнаете, как правильно использовать Diffie-Hellman на вашем сервере.
Есть три способа корректного использования Diffie-Hellman для TLS:
-
Отключить экспорт шифров (Export Cipher Suites). Не смотря на то, что современные браузеры больше не поддерживают экспорт наборов, атаки FREAK и Logjam позволяют атакам посредника обмануть браузер и использовать export-grade, после чего соединение TLS может быть расшифровано. Экспорт шифров является отголоском политики эры 90-х, которая заключалась в предотвращении вывода мощных криптографических протоколов за пределы США. Современные пользователи не полагаются на экспорт шифров и поэтому есть небольшой недостаток в их отключении.
-
Использование (Эфимерной) эллиптической кривой Diffie-Hellman (ECDH). Ключ обмена эллиптической кривой Diffie-Hellman обходит всем известные реальные криптоаналитические атаки, также современные браузеры предпочитают ECDH ограниченному пространству Diffie-Hellman. Дискретные логарифмические алгоритмы, которые мы используем для атаки стандартных групп Diffie-Hellman, не получают сильных преимуществ от предварительных вычислений, и индивидуальным серверам не нужно генерировать уникальные эллиптические кривые.
-
Используйте сильную группу Diffie Hellman. Несколько 1024-битных групп используются миллионами серверов, что делает их идеальной целью для предвычислений и прослушивания. Администраторам следует использовать 2048-битные или более сильные группы Diffie-Hellman с «безопасными» простыми числами.
Пункты (1) и (2) могут быть выполнены одновременно настройкой вашего сервера, таким образом, чтобы он использовал только современные наборы шифров. Ниже мы описываем, как определить современные шифры и создать группу Diffie-Hellman для известных серверов. Вы можете проверить свой сервер здесь или, используя Qualsys SSL Server Test.Если вы знаете другие способы, пожалуйста, сообщите нам.
Использование сильной DH группы
Сначала вам нужно создать новую группу Diffie-Hellman, независимо от того, какое программное обеспечение используется на сервере. Современные браузеры, включая Google Chrome, Mozilla Firefox и Microsoft Internet Explorer, увеличили минимальный размер группы до 1024 бит. Мы рекомендуем создать 2048-битную группу. Простейший способ создания новой группы это OpenSSL:
openssl dhparam -out dhparams.pem 2048
Общие серверные продукты
Для каждого серверного продукта мы предоставляем две опции конфигурации: (1) безопасные наборы шифра, которые вам следует использовать и (2) как определить параметры Diffie Hellman, которые вы сгенерировали выше.
Apache HTTP Server (mod_ssl)
SSL параметры могут быть глобально установлены в httpd.conf или в пределах особого виртуального хоста.
Наборы шифра
Отключите поддержку SSLv2 и SSLv3, включите поддержку TLS, таким образом, разрешая/запрещая особые шифры в приведенном порядке:
SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA SSLHonorCipherOrder on
Параметры DH
В более новых версиях Apache (2.4.8 and newer) и OpenSSL 1.0.2 или более поздних, вы можете точно определить параметры DH (далее DHparams) следующим образом:
SSLOpenSSLConfCmd DHParameters "{path to dhparams.pem}"
Если вы используете Apache с LibreSSL, или Apache 2.4.7 и OpenSSL 0.9.8a или более поздние версии, вы можете добавлять созданные ранее DHparams к концу вашего файла сертификата.
Перезагрузите конфигурацию
sudo service apache2 reload
nginx
Для размещения в конфигурацию сайта server/block in/etc/nginx/sites-enabled/default:
Набор шифров
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; ssl_prefer_server_ciphers on;
Параметры DH
ssl_dhparam {path to dhparams.pem}
Перезагрузите конфигурацию
sudo nginx -s reload
Microsoft IIS
-
Откройте Group Policy Object Editor (т.е. запустите gpedit.msc в командной строке).
-
Раскрыть Настройки Компьютера, Административные шаблоны, Сеть, и затем выберете настройки конфигурации SSL.
-
Согласно настройкам конфигурации SSL, откройте настройки порядка набора шифра SSL.
-
Установите строгий порядок набора шифра. Посмотрите список шифров, поддерживаемых Microsoft, и инструкции конфигурации Mozilla TLS .
Lighttpd
Изменения должны быть сделаны в /etc/lighttpd/lighttpd.conf
Наборы кодов
ssl.cipher-list = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA "
Параметры DH
ssl.dh-file="{path to dhparams.pem}"
Перезагрузите конфигурацию
sudo service lighttpd restart
Apache Tomcat
В server.xml (для JSSE)
Наборы шифра
<Connector ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_SHA256,TLS_ECDHE_RSA_WITH_AES_128_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_SHA,TLS_ECDHE_RSA_WITH_AES_256_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_SHA384,TLS_ECDHE_RSA_WITH_AES_256_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_SHA,TLS_DHE_RSA_WITH_AES_128_SHA256,TLS_DHE_RSA_WITH_AES_128_SHA,TLS_DHE_DSS_WITH_AES_128_SHA256,TLS_DHE_RSA_WITH_AES_256_SHA256,TLS_DHE_DSS_WITH_AES_256_SHA,TLS_DHE_RSA_WITH_AES_256_SHA" />
Примечание: чтобы использовать 256-битные шифры AES, необходимо установить JCE Unlimited Strength Jurisdiction Policy Files, которые можно найти здесь.
Postfix SMTP
Оба параметра должны быть установлены в /etc/postfix/main.cf.
Наборы шифра
smtpd_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CBC3-SHA, KRB5-DES, CBC3-SHA
Параметры DH
smtpd_tls_dh1024_param_file = ${config_directory}/dhparams.pem
Перезагрузите конфигурацию
sudo postfix reload
Sendmail
Эти изменения могут быть произведены в разделе LOCAL_CONFIG вашего /etc/mail/sendmail.mc
Наборы шифра
O CipherList=ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
Параметры DH
O DHParameters={path to dhparams.pem}
Перезагрузите конфигурацию
sudo service sendmail restart
Dovecot
Эти изменения должны быть произведены в /etc/dovecot.conf
Наборы шифра
ssl_cipher_list=ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA ssl_prefer_server_ciphers = yes (Dovecot 2.2.6 or greater)
Параметры DH
#regenerates every week
ssl_dh_parameters_length = 2048
Перезагрузите конфигурацию
sudo doveadm reload
HAProxy
Эти изменения должны быть произведены в глобальном разделе вашей конфигурации.
Наборы шифра
ssl-default-bind-ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
Параметры DH
Добавьте файл параметра DH, созданный с помощью OpenSSL, к вашему сертификату (crt файл).
Примечание: Так как для установки максимального размера первичных файлов, используемых для DHE, существует опция конфигурации под названием tune.ssl.default-dh-param , размещение стандартных параметров в вашем сертификате файла обнуляет его.
Перезагрузите конфигурацию
sudo haproxy -f haproxy.cfg -p $(</var/run/haproxy-private.pid) -st $(</var/run/haproxy-private.pid)
Amazon Elastic Load Balancing
Последний набор встроенных параметров SSL (2015-05) использует не DHE, а ECDHE шифры, и поэтому не является уязвимым к Logjam. Смотрите документацию Amazon.
OpenSSH
Протокол SSH не подвержен LogJam атаке, в которой активный взломщик может прервать соединение с криптографией export-grade. Однако, многие применения SSH, вместе с OpenSSH используют фиксированные простые числа, включая 1024-bit Oakley Group 2. Есть пара опций. Первая и самая легкая опция — это заставить пользователей использовать эллиптическую кривую Diffie-Hellman. Особенно кривую 25519. Это может быть выполнено настройкой вашего алгоритма обмена ключами следующим образом:
KexAlgorithms curve25519-sha256@libssh.org
Если вы хотите продолжать поддерживать неэллиптическую кривую Diffie-Hellman, по крайней мере, вам следует отключить поддержку Group 1, удалив diffie-hellman-group1-sha1 Key Exchange. Можете оставить diffie-hellman-group14-sha1, который использует 2048-битное простое число.
Существует еще одна опция для создания новых групп Diffie-Hellman:
ssh-keygen -G moduli-2048.candidates -b 2048 ssh-keygen -T moduli-2048 -f moduli-2048.candidates
Затем вам необходимо установить moduli-2048 на ваш системный модульный файл. В Debian/Ubuntu, он находится в /etc/ssh/moduli. SSH выбирает из этого файла (практически хаотично), поэтому вам следует заменить существующий модульный файл на новые группы, которые вы создали, вместо добавления этих новых групп.
Перевод: Анна Давыдова
Источник: weakdh.org