Новость

23-04-17

SSL-соединение получило слабый эфемерный ключ Диффи-Хеллмана: как решить данную проблему

В некоторых случаях при неправильной установке SSL-сертификата на сервер можно увидеть следующее уведомление в браузере: «При соединении с www.site.com произошла ошибка. SSL получило слабый эфемерный ключ Диффи-Хеллмана в сообщении рукопожатия «Обмен ключами сервера». (Код ошибки: ssl_error_weak_server_ephemeral_dh_key).

  • Страница, которую вы пытаетесь посмотреть, не может быть отображена, так как достоверность полученных данных не может быть проверена.
  • Пожалуйста, свяжитесь с владельцами веб-сайта и проинформируйте их об этой проблеме.

Что делать в данной ситуации? Как справиться с этой проблемой?

Причина возникновения этой проблемы кроется в том, что сервер пытается установить защищенное соединение, используя слабый ключ кодирования (менее 1024 бит). Рекомендуемый размер ключа кодирования – 2048 бит. Самый простой метод генерации такого ключа – это использование OpenSSL:

openssl dhparam -out dhparams.pem 2048

Чтобы решить проблему с различными серверами, необходимо:

  1. Задать безопасные наборы кодов
  2. Определить соответствующие параметры для алгоритма Диффи-Хеллмана

Решение для Apache:

Параметры 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

Параметры Диффи-Хеллмана:

В новых версиях Apache (2.4.8 и выше), а также OpenSSL 1.0.2. и выше вы можете напрямую задать файл с параметрами Диффи-Хеллмана:

SSLOpenSSLConfCmd DHParameters "{путь к dhparams.pem}"

Если вы используете Apache с LibreSSL или работаете с версиями Apache 2.4.7 или OpenSSL 0.9.8a и выше, вы можете добавить параметры Диффи-Хеллмана, сгенерированные ранее, в конец вашего файла сертификата.

Выполняем перезагрузку конфига:

sudo service apache2 reload

Решение для nginx

В блок server в конфиге сайта /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;

Параметры Диффи-Хеллмана

ssl_dhparam {путь к dhparams.pem}

Перезагрузка конфига:

sudo nginx -s reload

Microsoft IIS

  1. Открываем Group Policy Object Editor (запускаем gpedit.msc в командной строке).
  2. Переходим в Computer Configuration, Administrative Templates, Network, после чего щелкаем по SSL Configuration Settings.
  3. В разделе SSL Configuration Settings открываем параметр SSL Cipher Suite Order
  4. Задаем устойчивые коды. Список кодов можно посмотреть на сайте Microsoft или на странице Mozilla.

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 "

Параметры Диффи-Хеллмана:

ssl.dh-file="{путь к dhparams.pem}"

Перезагрузка конфига:

sudo service lighttpd restart

Apache Tomcat

В файле server.xml file (для 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"

/>

Примечание: чтобы использовать AES коды 256-бит, необходимо установить 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

Параметры Диффи-Хеллмана:

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

Параметры Диффи-Хеллмана:

O DHParameters={путь к 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)

Параметры Диффи-Хеллмана:

#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

Параметры Диффи-Хеллмана:

Добавляем в файл сертификата (crt) в самый конец файл с параметром Диффи-Хеллмана, сгенерированный с помощью OpenSSL.

Примечание: несмотря на наличие опции tune.ssl.default-dh-param, которая позволяет задавать максимальный размер простых чисел, используемых для DHE, размещение произвольных параметров в вашем файле сертификата будет переписывать эти значения.

Перезагрузка конфига:

sudo haproxy -f haproxy.cfg -p $(</var/run/haproxy-private.pid) -st $(</var/run/haproxy-private.pid)

Amazon Elastic Load Balancing 

Последний набор предопределенных параметров SSL (2015-05) использует коды ECDHE, а не DHE, которые неуязвимы к LogJam-атаке. Детали можно узнать в документации.

OpenSSH

Протокол SSH защищен от атак LogJam, в которых злоумышленник может перевести соединение на более слабую криптографию. Однако многие SSH реализации, включая OpenSSH, используют простые числа – к примеру, 1024-bit Oakley Group 2. Решить проблему можно несколькими способами. Первый и самый простой вариант – заставить клиентов использовать алгоритм Диффи-Хеллмана на эллиптических кривых. В частности, Curve 25519. Сделать это можно, задав Key Exchange алгоритмы:

KexAlgorithms curve25519-sha256@libssh.org

Если вы хотите продолжить поддержку неэллиптического алгоритма Диффи-Хеллмана, вы должны отключить поддержку Group 1, удалив diffie-hellman-group1-sha1. Можно оставить diffie-hellman-group14-sha1, который использует 2038-битные простые числа.

Также можно сгенерировать новые группы Диффи-Хеллмана:

ssh-keygen -G moduli-2048.candidates -b 2048

ssh-keygen -T moduli-2048 -f moduli-2048.candidates

Вам нужно будет затем установить moduli-2048 в ваш системный moduli файл. В Debian/Ubuntu он находится в /etc/ssh/moduli. SSH выбирает (практически случайным образом) группы из этого файла, таким образом вы должны внести в moduli файл новые сгенерированные группы, удалив старые.

Если у вас по-прежнему остались какие-либо вопросы, вы можете обратиться в службу поддержки ЛидерТелеком по представленным на сайте контактам.