Установка SSL-сертификата и переход к протоколу HTTPS – отличный способ повысить безопасность соединений между браузером и сервером. SSL-соединение является крайне рекомендованным для всех сайтов, где требуется пользовательская регистрация. Вопреки тому, что говорят многие устаревшие инструкции и руководства, сертификат не добавляет никакой серьезной нагрузки на сервер, и его можно легко и недорого выпустить.
Как установить SSL-сертификат на Nginx
Для установки SSL на Nginx нужно будет выполнить следующие шаги:
- Вы должны получить архив с сертификатом на свой почтовый адрес, который был указан при заказе SSL-сертификата. Архив обычно хранит в себе корневой, промежуточный сертификат, а также сертификат для домена. Если вы уже имеете файл bundle.crt, вы можете сразу переходить к шагу 4. В противном случае вам нужно будет объединить в один файл три файла сертификатов. Этот процесс подробно описан в пунктах 2 и 3.
- У вас должно быть три файла: comodo_root.crt (корневой сертификат), comodo_intermediate.crt (промежуточный сертификат) и vash_domen.crt. Скопируйте их вместе с файлом .key в произвольный каталог на своем сервере, в котором вы хотите их хранить.
- Вам нужно будет объединить файл с корневым сертификатом (comodo_root.crt), файл с промежуточным сертификатом (comodo_intermediate.crt) и файл сертификата vash_domen.crt в один crt-файл. Делается это с помощью следующей команды:
cat comodo_root.crt comodo_intermediate.crt vash_domen.crt > bundle.crt
В некоторых случаях Comodo присылают архив, в котором файлы промежуточного сертификата и корневого сертификата уже объединены в один файл. Если так, то вам нужно будет объединить его с файлом сертификата при помощи следующей команды:
cat comodo-bundle.crt vash_domen.crt > bundle.crt
- Переходим к настройке Nginx.
Открываем файл виртуального хоста Nginx для сайта, который вы хотите защитить. Если вы хотите, чтобы ваш сайт был доступен и через незащищенное, и через защищенное соединение, вам нужно будет добавить модуль сервера для каждого типа подключения. Сделайте копию существующего модуля для незащищенного соединения и вставьте его под основным кодом. После чего добавьте к нему следующие строки (выделены жирным):
server {
listen 443;
ssl on;
ssl_certificate /etc/ssl/bundle.crt;
ssl_certificate_key /etc/ssl/vash_domen.key;
server_name vashdomen.com;
access_log /var/log/nginx/nginx.vhost.access.log;
error_log /var/log/nginx/nginx.vhost.error.log;
location / {
root /home/www/public_html/vash_domen/public/;
index index.html;
}
}
Убедитесь в том, что в ssl_certificate указан crt-файл, созданный нами ранее.
Если вы использовали генератор, приведенный выше по ссылке, то в таком случае ваш конфигурационный файл может иметь следующий вид (здесь мы подразумеваем, что вы генерировали dhparam.pem для прямой секретности. Если нет, то делается это командой openssl dhparam -out /etc/pki/nginx/dhparam.pem 4096):
server {
listen 80;
server_name name.ru www.name.ru;
return 301 https://name.ru$request_uri;
}
# Добавляем 301 редирект
server {
listen 443 ssl http2;
server_name www.name.ru;
# здесь обязательно указываем сертификаты
ssl_certificate /etc/nginx/ssl/name.ru/bundle.crt;
ssl_certificate_key /etc/nginx/ssl/name.ru/name.key;
return 301 https://name.ru$request_uri;
}
server {
# добавляем протокол http2
listen 443 ssl http2;
server_name name.ru;
access_log off;
#access_log /var/log/nginx/name.ru.access.log;
error_log /var/log/nginx/name.ru.error.log;
ssl on;
# Включаем OCSP-stapling. Что это такое и зачем нужно, вы можете найти у нас в FAQ.
ssl_stapling on;
ssl_stapling_verify on;
# наши сертификаты
ssl_certificate /etc/nginx/ssl/name.ru/bundle.crt;
ssl_certificate_key /etc/nginx/ssl/name.ru/name_private.key;
ssl_dhparam /etc/nginx/ssl/name.ru/dhparam.pem;
# настраиваем сессию
ssl_session_tickets off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
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';
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security max-age=31536000;
# проксирование данных
location / {
# параметры проксирования
proxy_send_timeout 600;
proxy_read_timeout 600;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header HTTPS YES;
# IP-адрес целевой площадки для проксирования
proxy_pass http://192.168.1.108;
}
}
- Сделайте рестарт Nginx. Просто выполните следующую команду:
service nginx restart