Создание DH (Diffie Hellman) сертификата

Если вы в данный момент занимаетесь настройкой SSL сертификата для вашего домена, то скорее всего уже слышали о том, что безопасность сайта можно улучшить не только SSL сертификатом, но и специальным ключом, использующий алгоритм Диффи Хельмана. Данный ключ может использоваться не только в работе сайта, но и в любом другом случае, где применяются технологии шифрования. Одним из ярких примеров, где применяются DH ключи является программа OpenVPN.

Ниже мы рассмотрим процесс создания DH ключа и подключения ключа к популярным веб, почтовым и VPN серверам.

(!) Все операции производятся на операционной системе Linux Centos 7.


Для создания 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 <img src="/content/images/2017/06/lighttpd.png" width=100">

Настройка производится в конфигурационном файле /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 режим работы.

(!) Списки чиперов, указанные в примерах, не являются окончательными и можгут меняться, в зависимости от текущих уязвимостей протоколов и ваших потребностей.

Comments: