SSL (https) в Nginx
nginx/1.4.6
Чтобы защитить передаваемый трафик между сервером и клиентом можно использоваться механизм SSL шифрования.
Так как nginx часто выступает в роли фронтенда, то шифрование возлагается на него.
Создание самоподписанного сертификата
Создадим папку где будем хранить сертификаты:
mkdir /etc/nginx/ssl chown root:root /etc/nginx/ssl chmod 700 /etc/nginx/ssl
Перейдем в эту папку и сгенерируем сертификат:
cd /etc/nginx/ssl openssl req -new -x509 -days 9999 -nodes -newkey rsa:2048 -out cert.pem -keyout cert.key
При генерации вас попросят указать некоторые данные, так как мы создаем сертификат для себя то заполнять их не обязательно. Настроим использование одного самоподписанного сертификата для нескольких сайтов.
Настройка
Теперь для конфигурации хоста с поддержкой шифрования будем использовать следующий шаблон:
server { listen *:80; listen *:443 ssl; server_name my.site.com; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # SSLv3 исключить CVE-2014-3566 ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/cert.key; ... }
таким образом можно работать как по HTTP так и HTTPS
Пример с принудительным использованием HTTPS
server { listen *:80; server_name my.site.com; rewrite ^ https://$host$request_uri? permanent; } server { listen *:443 ssl; server_name my.site.com; ssl on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # SSLv3 исключить CVE-2014-3566 ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/cert.key; ... }
После настройки необходимо перезагрузить nginx
/etc/init.d/nginx reload
Всё готово, для доступа к сайту можно использовать HTTPS протокол
https://my.site.com
Так как сертификат самоподписанный, браузер попросит подтвердить исключение на его использование.
Дополнительные опции создания SSL-сертификата
Создание сертификата командой:
openssl req -new -x509 -days 9999 -nodes -out cert.pem -keyout cert.key
запрашивает некоторую информацию для создания сертификата, заполнение которой можно пропустить.
Но если интересно вот описание параметров:
Значение | Описание | Обязательный параметр? |
---|---|---|
С | Двухсимвольный код страны (Country) | нет |
ST | Название региона/области/края/республики/… (State Name) | нет |
L | Название города/поселка/… (Locality Name) | нет |
O | Название организации (Organization Name) | нет |
OU | Название отдела (Organization Unit) | нет |
CN | Имя сертификата, при создании серверных сертификатов используется доменное имя сайта (Common Name) | да |
emailAddress | почтовый адрес (E-mail address) | нет |
Чтобы не вводить эти параметры интерактивное можно использовать опцию -subj:
openssl req -new -x509 -days 9999 -nodes -subj /C=RU/O=My\ site/CN=my.site.com/emailAddress=admin@site.com -out cert.pem -keyout cert.key
Обсуждение
http://www.opennet.ru/base/sec/ssl_sertifacition.txt.html
Очень признателен вам за статью! Помогло!
Я конечно не разбираюсь в этом, но уж помочь разобраться как составить защищенное соединение https для сайта можно было бы и поподробнее
Куда уж подробнее?
))
Спасибо, просто и удобно. Плюс использовал server_name *.* ;
Можете подсказать как сгенирировать сертификат на Windows?
Спасибо за статью. Правда, еще можно немного добавить команд по генерации csr,key и crt в разных ситуациях (на лету без вопросом, с готовым ключом, с ключом без пароля, и тп.), как пишут здесь - http://sysadm.pp.ua/internet/pound-apache-nginx-ssl-setup.html
Не взлетело. В конфиге джумлы ssl включил. Домен третьего уровня. При генерации серта заполнил все поля. Только звездочки не ставил перед портами 'listen 80;' - для конкретного домена.
Здравствуйте! Увеличиваю поток клиентов с онлайн карт!
Накрутка рейтинга на Авито/Яндекс/2гис/Маркетплейсы и др.
А так же: - Удаление отзывов на Яндексе и Авито! - Реклама в Яндекс/Гугл, ВК и Инстаграм. - Создание и СЕО сайтов. - Авито продвижение.
Если интересно, пишите мне в WhatsApp: +7(962) 546-38-36