В современном мире шифрование данных является не просто прихотью, а прямой необходимостью. В частности — шифрование http трафика имеет огромное значение для всех сайтов, где производится обработка любых персональных данных. А также для защиты от mitm-атак.
Таким образом, использование Forward Secrecy на веб-серверах становится обязательным для каждого сайта, работающего по https протоколу и позволяет улучшить стойкость шифрования информации.
Forward secrecy можно соответствующим образом настроить в nginx.
Предположим, у вас есть какой-то сайт который должен поддерживать работу по https. Прежде всего необходимо создать ключ Диффи-Хеллмана.
# openssl dhparam -out /etc/nginx/ssl/dh-2048.pem 2048
И выставить соответствующие права доступа для него.
# chmod 0600 /etc/nginx/ssl/dh-2048.pem
Далее следует настроить nginx. Вот пример конфигурации для сайта, работающего на ssl.
server { server_name example.com; listen 80; listen 443 ssl; ssl_certificate /etc/nginx/ssl/example.com_crt.pem; ssl_certificate_key /etc/nginx/ssl/example.com_key.pem; ssl_dhparam ssl/dh-2048.pem; ssl_ciphers ECDH:DH:!ADH:!AECDH:!SEED:!DES:!3DES:!RC4:!NULL; ... }
Рассмотрим каждую переменную.
ssl_dhparam — путь к файлу с ключом Диффи-Хеллмана. Можно указать путь, относительно директории с конфигурационными файлами nginx.
ssl_ciphers — шифры, которые будут использоваться для ssl соединений. У меня указаны шифры, подобранные для prosody. Минимальная длина ключа составляет 128 бит. Все поддерживают forward secrecy.
После настройки nginx следует перезапустить командой service nginx restart.
Для тестирования настроек воспользуйтесь сервисом https://www.ssllabs.com/ssltest/index.html. В результатах теста, в параграфе «Protocol Details», должен быть вот такой результат: