SSL-соединение получило слабый эфемерный ключ Диффи-Хеллмана: как решить данную проблему
В некоторых случаях при неправильной установке SSL-сертификата на сервер можно увидеть следующее уведомление в браузере: «При соединении с www.site.com произошла ошибка. SSL получило слабый эфемерный ключ Диффи-Хеллмана в сообщении рукопожатия «Обмен ключами сервера». (Код ошибки: ssl_error_weak_server_ephemeral_dh_key).
- Страница, которую вы пытаетесь посмотреть, не может быть отображена, так как достоверность полученных данных не может быть проверена.
- Пожалуйста, свяжитесь с владельцами веб-сайта и проинформируйте их об этой проблеме.
Что делать в данной ситуации? Как справиться с этой проблемой?
Причина возникновения этой проблемы кроется в том, что сервер пытается установить защищенное соединение, используя слабый ключ кодирования (менее 1024 бит). Рекомендуемый размер ключа кодирования – 2048 бит. Самый простой метод генерации такого ключа – это использование OpenSSL:
openssl dhparam -out dhparams.pem 2048
Чтобы решить проблему с различными серверами, необходимо:
- Задать безопасные наборы кодов
- Определить соответствующие параметры для алгоритма Диффи-Хеллмана
Решение для 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
- Открываем Group Policy Object Editor (запускаем gpedit.msc в командной строке).
- Переходим в Computer Configuration, Administrative Templates, Network, после чего щелкаем по SSL Configuration Settings.
- В разделе SSL Configuration Settings открываем параметр SSL Cipher Suite Order
- Задаем устойчивые коды. Список кодов можно посмотреть на сайте 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 файл новые сгенерированные группы, удалив старые.
Если у вас по-прежнему остались какие-либо вопросы, вы можете обратиться в службу поддержки ЛидерТелеком по представленным на сайте контактам.