Мы уже писали об усилении SSL для веб-сервера Apache. В этом материале мы рассмотрим аналогичные действия в отношении веб-сервера Nginx.
Debian 7
Обновим пакеты:
apt-get update
apt-get upgrade
Установим веб-сервер nginx:
apt-get install nginx
Пакет openssl уже был установлен по умолчанию.
Имеем версии nginx и openssl:
nginx -v nginx version: nginx/1.2.1
openssl version OpenSSL 1.0.1e 11 Feb 2013
Подключим домен ukrnames.idua.org к серверу и установим SSL. Выполним проверку SSL-соединения на сайте https://www.ssllabs.com/ssltest/analyze.html?d=ukrnames.idua.org
Получили оценку “F” – плохой результат.
Произведем настройку веб-сервера nginx для устранения уязвимостей.
Оставим активными протоколы TLS, заменив в файле, где мы подключали сертификат (/etc/nginx/sites-enabled/default), строку “ssl_protocols SSLv3 TLSv1;” на “ssl_protocols TLSv1 TLSv1.1 TLSv1.2;”
sed -i 's/ssl_protocols SSLv3 TLSv1/ssl_protocols TLSv1 TLSv1.1 TLSv1.2/g' /etc/nginx/sites-enabled/default
Теперь заменим алгоритмы шифрования с “ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;” на “ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;” :
sed -i 's/ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP/ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH/g' /etc/nginx/sites-enabled/default
Осталось решить уязвимость “This server supports weak Diffie-Hellman (DH) key exchange parameter”, более подробно о DH-key можно узнать здесь.
Перейдем в папку с нашим SSL-сертификатом (/etc/nginx/) и сгенерируем ключ не менее 2048 бит. В данном примере это будет ключ длиной 4096 бит:
cd /etc/nginx/ openssl dhparam -out dhparam.pem 4096
Процесс генерирования может занять много времени.
После завершения процесса генерирования создастся файл /etc/nginx/dhparam.pem
В конфигурационный файл веб-сервера добавим строку:
ssl_dhparam /etc/nginx/dhparam.pem;
Так же подключим возможность работы HSTS, добавив в конфигурационный файл nginx строку:
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
Так же добавим кеширование ssl-сессий и запрет на использование вашего сайта по протоколу https во фреймах:
add_header X-Frame-Options "DENY"; ssl_session_cache builtin:1000 shared:SSL:10m;
Перезагружаем веб-сервер и заново проверяем безопасное соединение сайта.
Теперь оценка “А+”, на этом конфигурация окончена.
Debian 8
Выполним все то же самое для Debian 8.
Версия OpenSSL и Nginx:
openssl version OpenSSL 1.0.1k 8 Jan 2015
nginx -v nginx version: nginx/1.6.2
Подключим домен ukrnames.idua.org к серверу, установим SSL и настроим конфигурацию веб-сервера относительно безопасности. Конфигурационный файл (в данном примере /etc/nginx/site-enabled/default) будет иметь вид:
server { listen 443; server_name ukrnames.idua.org; add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; add_header X-Frame-Options "DENY"; root /var/www/; index index.html index.htm; ssl on; ssl_certificate /etc/nginx/cert.pem; ssl_certificate_key /etc/nginx/cert.key; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_session_timeout 5m; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH; ssl_dhparam /etc/nginx/dhparam.pem; }
Перезагружаем веб-сервер и проверяем безопасное соединение.
Оценка “А+”, настройка веб-сервера закончена.