Если вы в данный момент занимаетесь настройкой SSL сертификата для вашего домена, то скорее всего уже слышали о том, что безопасность сайта можно улучшить не только SSL сертификатом, но и специальным ключом, использующий алгоритм Диффи Хельмана. Данный ключ может использоваться не только в работе сайта, но и в любом другом случае, где применяются технологии шифрования. Одним из ярких примеров, где применяются DH ключи является программа OpenVPN.
Ниже мы рассмотрим процесс создания DH ключа и подключения ключа к популярным веб, почтовым и VPN серверам.
Для создания DH (Diffie Hellman) ключа необходимо перейти в папку tmp
# cd /tmp
или любую другую удобную для вас папку, и запустить команду генерации DH (Diffie Hellman) ключа
# openssl dhparam -out dhparams.pem 2048
Для генерации ключа используется пакет openssl, который присутствует во всех linux системах.
Так как openssl используется для генерации разных видов ключей, при генерации необходимо указать параметр создания именно DH (Diffie Hellman) сертификата.
Криптостойкость ключа составляет 2048 бит, что делает ключ достаточно надежным.
В параметре -out необходимо указать имя ключа. Также возможно указать полный путь /tmp/dhparams.pem
Генерация ключа занимает достаточно долгое время. Во время создания ключа на экране вы сможете наблюдать примерно следующую картину
Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ..................+......................+................................................................................................................................................................................................................................................. ...........................................................................................................................................................................+............................................................+.......
После некоторого ожидания ключ будет создан и готов для дальнейшего использования. Ниже приведены выдержки из конфигурационных файлов с указанием строк для подключение DH ключа к веб, почтовым и VPN серверам.
Для подключения DH ключа необходимо два параметра:
(1) включить безопасные шифры(чиперы)
(2) подключить ключ, который сгенерирован на предудущем этапе.
Nginx
Настройка производится в конфигурационном файле /etc/nginx/sites-enabled/example.com
(!) путь и имя конфигурационного файла может отличаться, так
как Nginx позволяет производить include дополнительных конфигурационных
файлов в основной.
Добавляем данные о ключе
ssl_dhparam path/file;
данные о чиперах
ssl_prefer_server_ciphers on; 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';
и перезагружаем сервис
systemctl restart nginx
(!) Стоит обратить внимание на параметр ssl_prefer_server_ciphers on; данный парамер непосредственно включает чтение списка чиперов, а после уже идет список чиперов.
Apache
Настройка производится в конфигурационном файле `/etc/httpd/conf/httpd.conf`(!) путь и имя конфигурационного файла может отличаться, так как Apache позволяет производить include дополнительных конфигурационных файлов в основной конфигурационный файл.
(!)Стоит также обратить внимание еще на тот момент, что расположение файла может отличаться в зависимости от операционной системы. Так например в операционных системах Debian/Ubuntu данный файл будет располагаться по следующему пути /etc/apache/httpd.conf, либо /etc/apache2/httpd.conf
Добавляем данные о ключе
SSLDHParametersFile /path/dh.file
данные о чиперах
SSLHonorCipherOrder on 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
и перезагружаем сервис
systemctl restart httpd
Lighttpd
Настройка производится в конфигурационном файле /etc/lighttpd/lighttpd.conf
Добавляем данные о ключе
ssl.dh-file="path/file"
данные о чиперах
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 "
и перезагружаем сервис
systemctl restart lighttpd
Sendmail
Настройка производится в конфигурационном файле /etc/mail/sendmail.mc в секции LOCAL_CONFIG
Добавляем данные о ключе
O DHParameters=path/file
данные о чиперах
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
и перезагружаем сервис
systemctl restart sendmail
Postfix
Настройка производится в конфигурационном файле /etc/postfix/main.cf
Добавляем данные о ключе
smtpd_tls_dh1024_param_file = path/file
данные о чиперах
smtpd_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDC3-SHA, KRB5-DE5, CBC3-SHA
и перезагружаем сервис
systemctl restart postfix
OpenVPN
Настройка производится в конфигурационном файле /etc/openvpn/server.conf
Добавляем данные о ключе
dh "path/file"
и перезагружаем сервис
systemctl restart openvpn@server
Заметки:
(!) Включение дополнительных параметров для работы DH ключа не требуется.
(!) Для работы с DH ключом необходимо обязательно включить SSL режим работы.
(!) Списки чиперов, указанные в примерах, не являются окончательными и можгут меняться, в зависимости от текущих уязвимостей протоколов и ваших потребностей.