Nginx. Статический веб-сервер с SSL






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


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

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

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

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

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

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

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

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

Настройка Nginx

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

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

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

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

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

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

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

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

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

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

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




Nginx. Статический веб-сервер с SSL: 5 комментариев

  1. Сертификаты не используют потому, что они стоят ощутимых денег, а на самоподписанные ругается браузер.

  2. Хотя тут речь про популярный сайты, которые вероятно могу себе это позволить :)

  3. У philsdomains устанешь писать в саппорт если возникнут проблемы с доменом или сертификатом.

Комментарии запрещены.