Настройка SSL-сертификата в nginx с защитой А+
sys-admins 19-08-2020, 22:11 605 Блог
Протокол HTTPS - правильным шаг повышающий безопасность, доверие посетителей и продвижения сайта. При помощи SSL сертификата весь HTTP трафик между посетителем сайта и сервером шифруется. В этой статье я Вам расскажу о том как правильно настроить на VPS и выделенном сервере, nginx https с уровнем защиты A+.
Будем считать что у Вы уже сгенерировали SSL от Let’s Encrypt с помощью certbot (статья в разработке)
Тестовый стенд на котором мы будем устанавливать SSL сертификат имеет следующие характеристики: OC Debian 9.12 , nginx 1.18.0 , PHP 7.0.33
Сформируем ключ прямой секретности (dhparam.pem) по алгоритму Диффи-Хеллмана.
dhparam.pem нам нужен для того чтоб заработал Forward Secrecy (прямая секретность). При закрытии сеанса связи, обе стороны уничтожают ключи сеанса. Поэтому даже, если ключ сеанса будет скомпрометирован, злоумышленник получит доступ только к данным зашифрованным этим временным ключом. В этом и заключается суть повышенного режима безопасности сайта, известного как «прямая секретность»
Сгенерировать ключ можно так:
openssl dhparam -out /etc/ssl/dhparam.pem 4096
число 4096 — это длинна ключа
Формируем конфиг NGINX с HTTPS
server { listen 80; listen [::]:80; server_name itshnic.pp.ua www.itshnic.pp.ua; return 301 https://$host:443$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name itshnic.pp.ua www.itshnic.pp.ua; ssl_certificate "/etc/ssl/itshnic.pp.ua/itshnic.pp.ua.cert.pem"; ssl_certificate_key "/etc/ssl/itshnic.pp.ua/itshnic.pp.ua.key.pem"; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS:!NULL:!RC4; ssl_dhparam /etc/ssl/dhparam.pem; ssl_session_timeout 1h; ssl_session_cache shared:SSL:10m; add_header Strict-Transport-Security "max-age=31536000;"; root /var/www/itshnic.pp.ua; index index.php index.html index.htm; access_log /var/log/nginx/routers.pp.ua.access.log combined; error_log /var/log/nginx/routers.pp.ua.error.log error; location / { try_files $uri $uri/ /index.php?$args; location ~ [^/]\.ph(p\d*|tml)$ { try_files /does_not_exists @php; } } location @php { fastcgi_index index.php; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors off; try_files $uri =404; include fastcgi_params; } # . files location ~ /\. { deny all; } # assets, media location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov| webm|mpe?g|avi|ogv|flv|wmv)$ { expires 15d; access_log off; } }
Давайте подробнее разберём файл конфигурации:
В первой секции server мы делаем автоматическую переадресацию с http на https.
Вторая секция server нам более интерестна.
Обратите внимание на listen 443 http2; Мы сразу включаем работу по протоколу HTTPS/2. Это позволяет нам увеличить скорость загрузки сайта.
ssl_certificate и ssl_certificate_key - указываем пути к файлу сертификата и файлу ключей;
ssl_dhparam - подключение ключа прямой секретности;
ssl_protocols и ssl_ciphers - какие будем использовать версии TLS и список шифров;
ssl_prefer_server_ciphers - устанавливаем более высокий приоритет серверных шифров перед клиентскими;
add_header Strict-Transport-Security - max-age=31536000; указывает браузерам использовать механизм HSTS (принудительного использования браузером протокола HTTPS)
Проверяем нашу конфигурацию на сайте https://www.ssllabs.com/ssltest/ Если всё правильно настроено, будет получена оценка A+.

Оценка “А+”, настройка SSL для nginx выполнена!