- 1: создание ssl-сертификата
- 2: настройка nginx для поддержки ssl
- 3: настройка брандмауэра
- Как обновить настройки Nginx
- Тестируем настройки
- Как сделать постоянный редирект?
- Additional security features
- Client certificates
- Examples
- Ssl/tls offloading
- Step 1: combine all certificates into a single file
- Загрузка необходимых файлов на веб-сервер
- Местонахождение ключа и сертификата
- Настройка nginx для поддержки ssl
- Настройка ssl
- Настройка веб-сервера nginx на использование ssl-сертификата
- Перенос сертификатов с компьютера linux/mac os:
- Заключение
1: создание ssl-сертификата
Для работы TLS/SSL использует комбинацию открытого сертификата и закрытого ключа. Закрытый ключ хранится на сервере и не разглашается. SSL-сертификат используется открыто и доступен всем пользователям, запрашивающим контент.
Чтобы создать самоподписанный сертификат и ключ, запустите команду:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
Команда задаст ряд вопросов. Рассмотрим компоненты команды подробнее:
- openssl: базовый инструмент командной строки для создания и управления сертификатами, ключами и другими файлами OpenSSL.
- req: эта подкоманда указывает, что на данном этапе нужно использовать запрос на подпись сертификата X.509 (CSR). X.509 – это стандарт инфраструктуры открытого ключа, которого придерживаются SSL и TLS при управлении ключами и сертификатами. То есть, данная команда позволяет создать новый сертификат X.509.
- -x509: эта опция вносит поправку в предыдущую субкоманду, сообщая утилите о том, что вместо запроса на подписание сертификата необходимо создать самоподписанный сертификат.
- -nodes: пропускает опцию защиты сертификата парольной фразой. Нужно, чтобы при запуске сервер Nginx имел возможность читать файл без вмешательства пользователя. Установив пароль, придется вводить его после каждой перезагрузки.
- -days 365: эта опция устанавливает срок действия сертификата (как видите, в данном случае сертификат действителен в течение года).
- -newkey rsa:2048: эта опция позволяет одновременно создать новый сертификат и новый ключ. Поскольку ключ, необходимый для подписания сертификата, не был создан ранее, нужно создать его вместе с сертификатом. Данная опция создаст ключ RSA на 2048 бит.
- -keyout: эта опция сообщает OpenSSL, куда поместить сгенерированный файл ключа.
- -out: сообщает OpenSSL, куда поместить созданный сертификат.
Как уже было сказано, все эти опции сгенерируют ключ и сертификат. Заполните появившиеся поля данными о сервере, которые будут отображаться в сертификате.
Самой важной строкой является Common Name (введите полное доменное имя сервера (FQDN) или свое имя). Как правило, в эту строку вносят доменное имя, с которым нужно связать сервер. В случае если доменного имени нет, внесите в эту строку IP-адрес сервера. В целом эти поля выглядят примерно так:
2: настройка nginx для поддержки ssl
Итак, на данном этапе ключ и сертификат созданы и хранятся в каталоге /etc/ssl. Теперь нужно отредактировать настройки Nginx:
- Создать сниппет, указывающий место хранения файлов SSL-сертификата и ключа.
- Добавить настройки SSL.
- Настроить блоки server для обслуживания запросов SSL и поддержки новых настроек.
3: настройка брандмауэра
Если вы включили брандмауэр ufw (согласно руководству по начальной настройке), на данном этапе его нужно настроить для поддержки трафика SSL. К счастью, веб-сервер Nginx регистрирует при установке несколько своих профилей в ufw.
Чтобы просмотреть доступные профили, введите:
Как обновить настройки Nginx
После корректировки настроек веб-сервера и брандмауэра нужно перезапустить Nginx, чтобы все изменения вступили в силу. Проверьте синтаксис на наличие ошибок с помощью:
sudo nginx -t
Если все правильно, на экране вы увидите:
nginx: [warn] "ssl_stapling" ignored, issuer certificate not found
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Предупреждение появляется в первой строке, поскольку мы используем самоподписанный сертификат. Не обращайте внимания, соединение все равно будет корректно шифроваться. В случае обнаружения ошибок их необходимо исправить. После этого потребуется перезапуск веб-сервера Nginx с помощью:
sudo systemctl restart nginx
Тестируем настройки
Нам нужно убедиться, что трафик между клиентом и сервером шифруется. Это можно сделать, открыв в браузере ссылку:
Как сделать постоянный редирект?
Если работа всех настроек сервера правильная, можно вместо временного редиректа ставить постоянный. Для этого откроем файл блока server:
sudo nano /etc/nginx/sites-available/default
В нем нужно найти return 302 и заменить значение на 301. Получится следующее:
Additional security features
There are number of other features that help support these use cases, including (but not limited to) the following:
Client certificates
NGINX can handle SSL/TLS client certificates and can be configured to make them optional or required. Client certificates are a way of restricting access to your systems to only pre‑approved clients without requiring a password, and you can control the certificates by adding revoked certificates to a certificate revocation list (CRL), which NGINX checks to determine whether a client certificate is still valid.
Examples
Here are a few examples of NGINX’s security features. These examples assume a basic understanding of NGINX configuration.
Ssl/tls offloading
When NGINX is used as a proxy, it can offload the SSL decryption processing from backend servers. There are a number of advantages of doing decryption at the proxy:
Step 1: combine all certificates into a single file
You should have received your SSL certificate via email in the form of a .zip file. Once you download and extract the file, you will see it consists of a server certificate, a rootcertificate, and an intermediate certificate.
The first step is to combine all three files into one.
You can do this manually, by copying and pasting the content of each file in a text editor and saving the new file under the name ssl-bundle.crt.
You can also do this via command-line. The command to merge the certificates into one file will depend on whether you have separate intermediate files or if these files are inside a single .ca-bundle file.
a) If all three certificates are listed separately, use the command:
cat your_domain.crt intermediate.crt root.crt >> ssl-bundle.crt
b) If the intermediate certificates are in one bundle, run:
cat your_domain.crt your_domain.ca-bundle >> ssl-bundle.crt
Загрузка необходимых файлов на веб-сервер
Сначала следует загрузить файлы .ca и .crt на веб-сервер из панели 1cloud. Если ваш сервер не имеет графического окружения рабочего стола, вы можете загрузить эти файлы на другой компьютер, а затем перенести их одним из описанных ниже способов.
Примечание: данный пример подразумевает, что необходимая для работы пара закрытый/открытый ключ была сгенерирована на том же веб-сервере, на который вы будете переносить приобретенный сертификат. Если вы создавали ключи на другой машине, вам необходимо также перенести файл закрытого ключа .key на ваш веб-сервер по аналогии с описанной ниже процедурой копирования файлов сертификатов.
Местонахождение ключа и сертификата
Создайте новый сниппет Nginx в каталоге /etc/nginx/snippets.
Рекомендуется указать в названии файла его назначение (к примеру, self-signed.conf):
sudo nano /etc/nginx/snippets/self-signed.conf
В этот файл нужно добавить директиву ssl_certificate, которая будет указывать путь к сертификату, и директиву ssl_certificate_key, которая задаёт путь к соответствующему закрытому ключу.
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
Настройка nginx для поддержки ssl
Примечание: В руководстве предполагается, что вы используете виртуальный хост (блок server) default, который хранится в каталоге /etc/nginx/sites-available. Если вы используете другой файл, пожалуйста, укажите его имя.
Для начала создайте резервную копию файла блока server.
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
Затем откройте файл блока server в текстовом редакторе:
sudo nano /etc/nginx/sites-available/default
Файл должен выглядеть примерно так:
server {listen 80 default_server;listen [::]:80 default_server;# SSL configuration# listen 443 ssl default_server;# listen [::]:443 ssl default_server;. . .
Настройка ssl
Теперь нужно создать другой сниппет, предназначенный для настроек SSL. Он позволит серверу Nginx использовать надёжный механизм шифрования и включит некоторые дополнительные функции безопасности.
Эти установленные параметры можно повторно использовать в будущих конфигурациях Nginx, потому этому файлу лучше дать какое-нибудь общее имя:
sudo nano /etc/nginx/snippets/ssl-params.conf
Для безопасной настройки SSL обратимся к рекомендациям Remy van Elst на сайте Cipherli.st. Этот сайт предназначен для распространения простых и надёжных параметров шифрования для популярного программного обеспечения. Больше параметров для Nginx можно найти здесь.
Примечание: Данный список настроек подходит для более новых клиентов. Чтобы получить настройки для других клиентов, перейдите по ссылке Yes, give me a ciphersuite that works with legacy / old software.
Скопируйте все предложенные параметры. Остаётся только добавить в них DNS распознаватель для восходящего канала запросов. В руководстве для этого используется Google.
Также нужно добавить параметр ssl_dhparam, чтобы настроить поддержку ключей Диффи-Хеллмана.
Настройка веб-сервера nginx на использование ssl-сертификата
После копирования файлов сертификата сайта и Центра Сертификации необходимо отредактировать параметры вашего веб-сервера Nginx. Для этого подключитесь к вашему серверу по SSH от имени пользователя root и выполните следующие операции:
Перенос сертификатов с компьютера linux/mac os:
Самый простой способ загрузки сертификатов на сервер – опция SCP, встроенная в возможность терминала вашего компьютера:
Заключение
Теперь сервер Nginx может шифровать передаваемые данные, что защитит взаимодействие сервера с клиентами и предотвратит перехват трафика злоумышленниками.
Конечно, при разработке сайта рекомендуется подписать SSL-сертификат в надежном центре сертификации, что позволит избежать появления отпугивающих предупреждений.
Tags: