MyTetra Share
Делитесь знаниями!
Nginx. Статический веб-сервер с SSL. Ручная настройка HTTPS
Время создания: 03.07.2019 18:31
Текстовые метки: nginx, https, ssl, шифрование, сайт, хост, настройка
Раздел: Компьютер - Linux - Сеть в Linux - HTTPS
Запись: xintrea/mytetra_syncro/master/base/15621678638k9rgsybof/text.html на raw.github.com

Сегодня мы рассмотрим настройку поддержки SSL в Nginx, т. е. научим наш сервер отдавать контент по защищённому HTTPS-соединению.

Вообще, на мой взгляд, очень странно что сегодня многие популярные сайты, требующие от пользователя авторизации в том или ином виде, всё ещё не предлагают выполнять это посредством HTTPS. Чем вызвано отношение владельцев таких сайтов к пользователям — непонятно. Но сегодня не об этом. Сегодня мы будем делать защищённым наш собственный сервер.

Ещё раз напоминаю на всякий случай: все примеры, приводимые в этой серии статей, применимы к Debian 5 «Lenny». То есть в вашем дистрибутиве Linux/UNIX могут отличаться пути к файлам конфигурации и init-сценариям. В остальном всё должно быть точно так же. В любом случае, вы всегда можете задать вопрос в комментариях или же попытаться разобраться самостоятельно.

Генерация сертификата и закрытого ключа

Для работы HTTPS (который попросту говоря является HTTP, «завёрнутым» в SSL) на стороне сервера требуется наличие закрытого ключа шифрования, а также SSL (X.509) сертификата, содержащего в том числе открытый ключ, передаваемый клиенту в процессе работы протокола. Если у вас есть сертификат выпущенный для вас специально вы можете использовать его. Я же в этой статье буду использовать ключ и self-signed сертификат сгенерированные самостоятельно.

Для генерации X.509-сертификата и закрытого ключа шифрования понадобится установленный пакет openssl. В системе он, как правило, присутствует по умолчанию, однако если это не так, вы можете установить его традиционным в Debian способом:

# apt-get install openssl

Теперь создайте каталог, в котором будут храниться сертификат и ключ:

# mkdir /etc/nginx/ssl

Перейдите в созданный каталог и создайте ключ и сертификат при помощи команды:

# cd /etc/nginx/ssl

# openssl req -new -x509 -nodes -out server.crt -keyout server.key

Вам необходимо будет ответить на вопросы, касающиеся идентификационных данных сертификата, после чего будут созданы два файла: server.crt и server.key, являющиеся сертификатом и ключом соответственно. Не забудьте прикрыть посторонним доступ к ключу вашего сервера:

# chmod 0600 /etc/nginx/ssl/server.key

Настройка Nginx

Теперь, когда все необходимые компоненты для организации работы SSL в вашем Nginx готовы, можно приступать к настройке самого Nginx. Создайте новый файл конфигурации, в каталоге /etc/nginx/sites-available с именем, например, secured и следующим содержимым:

server {

listen 443;

server_name secured;

access_log /var/log/nginx/secured.access.log;

error_log /var/log/nginx/secured.error.log;

ssl on;

ssl_certificate /etc/nginx/ssl/server.crt;

ssl_certificate_key /etc/nginx/ssl/server.key;

location / {

root /var/www/secured;

index index.html index.htm;

}

}

Все параметры, за исключением трёх, вам должны быть знакомы из предыдущих статей про Nginx. Сейчас же рассмотрим три новых параметра конфигурации.

Обратите внимание на значение параметра listen равное 443. Оно является таким потому, что веб-браузеры при использовании HTTPS-протокола по умолчанию будут пытаться соединяться именно на порт 443. Оправдаем их ожидания ;)

Установка значения опции ssl равным on включает в работу модуль сервера http_ssl_module (кстати, если вы собирали Nginx из исходных кодов, обратите внимание, чтобы вы собрали его с этим модулем, иначе SSL работать не будет).

При помощи опции ssl_certificate Nginx узнаёт о том, где хранится SSL-сертификат.

Значением параметра ssl_certificate_key опрделеяется местоположение файла закрытого ключа.

Также следует отметить, что перечисленные параметры могут встречаться как в контексте секций server, так и в общей секции. Иными словами, вы можете использовать либо один ключ и сертификат для всех виртуальных серверов, или же для каждого свой.

Теперь создайте root-каталог для хранения контента сервера и разместите там что-нибудь, вроде файла index.html с каким-нибудь содержимым.

# mkdir /var/www/secured

# echo "Test" > /var/www/secured/index.html

Осталось «включить» наш новый безопасный виртуальный хост:

# ln -s /etc/nginx/sites-available/secured /etc/nginx/sites-enabled/secured

И перезапустить сервер:

# /etc/init.d/nginx restart

Теперь попробуйте подключиться из вашего любимого браузера к вашему серверу по HTTPS-протоколу. Как правило, браузеры «гавкают» на сертификат, который невозможно проверить. Это логично, поскольку мы используем selfsigned-сертификат, не удостоверенный ни одним CA. В случае, если вы располагаете сертификатом выпущенным специально для вашего домена и подписанного центром сертификации, такого сообщения от вашего браузера вы получить, само-собой, не должны.


 
MyTetra Share v.0.59
Яндекс индекс цитирования