У сучасному світі шифрування даних є не просто примхою, а прямою необхідністю. Зокрема - шифрування 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», повинен бути ось такий результат:
А як на рахунок зворотної сумісності?
Рекомендую такий наборчик: ECDH: DH: EECDH: + AES256: -3DES: RSA + AES: RSA + 3DES:! NULL:! RC4;