Включаем в Nginx поддержку HTTP/2, TLSv1.3, HSTS, OCSP и получаем в ssllab класс А+
Полезные ссылки:
Tests:
Configs:
Nginx - Modules:
Настройка:
server {
listen 80;
server_name open-networks.ru;
rewrite ^ https://$http_host$request_uri? permanent; # force redirect http to https
}
server {
listen 443 ssl http2;
ssl on;
ssl_certificate /etc/letsencrypt/live/open-networks.ru/fullchain.pem; # path to your cacert.pem
ssl_certificate_key /etc/letsencrypt/live/open-networks.ru/privkey.pem; # path to your privkey.pem
ssl_trusted_certificate /etc/letsencrypt/live/open-networks.ru/chain.pem; # Если включён ssl_stapling;
ssl_dhparam /etc/ssl/nginx/dhparam_f.pem;
server_name open-networks.ru;
proxy_set_header X-Forwarded-For $remote_addr;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-XSS-Protection "1; mode=block";
add_header X-Frame-Options "DENY";
add_header X-Content-Type-Options nosniff;
add_header Referrer-Policy "same-origin";
# Дополнительные;
add_header Content-Security-Policy "default-src 'self' open-networks.ru; script-src 'self' 'unsafe-inline' 'unsafe-eval' open-networks.ru; style-src 'self' 'unsafe-inline' open-networks.ru; img-src 'self' open-networks.ru; connect-src 'self'";
add_header Permissions-Policy "geolocation=(),midi=(),sync-xhr=(),microphone=(),camera=(),magnetometer=(),gyroscope=(),fullscreen=(self),payment=()";
.....
Настраиваем nginx.conf:
# nano /etc/nginx/nginx.conf
http {
# Разрешает указанные протоколы;
ssl_protocols TLSv1.3; # add TLSv1.2 for Intermediate;
# Указывает, чтобы при использовании протоколов SSLv3 и TLS серверные шифры были более приоритетны, чем клиентские;
ssl_prefer_server_ciphers off; # add on for Intermediate;
# Наборы шифров Intermediate;
#ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
# Задаёт кривую для ECDHE-шифров;
ssl_ecdh_curve auto;
# Тип и объём кэша для хранения параметров сессий. Параметр shared задает общий для всех рабочих процессов nginx кэш;
ssl_session_cache shared:SSL:3m;
# Задаёт время, в течение которого клиент может повторно использовать параметры сессии;
ssl_session_timeout 12h;
# Разрешает или запрещает возобновление сессий при помощи TLS session tickets;
ssl_session_tickets off;
# Разрешает или запрещает прикрепление OCSP-ответов сервером;
ssl_stapling on;
# Разрешает или запрещает проверку сервером ответов OCSP;
ssl_stapling_verify on;
# Для преобразования имени хоста OCSP responder’а в адрес;
resolver 172.16.5.57 valid=300s;
resolver_timeout 5s;
}
Создаем самоподписанные SSL сертификаты: или получаем от Let's Encrypt.
# mkdir /etc/ssl/nginx
# openssl req -x509 -nodes -days 1095 -newkey rsa:2048 -keyout /etc/ssl/nginx/iqadm.ru.key -out /etc/ssl/nginx/iqadm.ru.crt
-х509 означает, что мы хотим создать самоподписанный сертификат
-nodes означает, что мы не будем защищать сертификат паролем (если сделать это, то пароль придётся вводить при каждом старте)
-days 3650 означает, что сертификат будет действителен (почти) 10 лет
-newkey rsa:2048 создаст ключ длиной 2048 бит
-keyout и -out — названия наших ключа и сертификата
Генерируем ключ Диффи — Хеллмана:
# openssl dhparam -out /etc/ssl/nginx/dhparam.pem 2048 или 4096
Ссылки для чтения:
| Хабрахабр - 1 - 2 - 3 - 4 - 5 | OpenSSL, ssl_ciphers и nginx: прокачиваем на 100% |