Реклама ООО Таймвэб
Реклама ООО Таймвэб

Как настроить SSL-сертификат на Nginx

1 комментарий
Как настроить SSL-сертификат на Nginx

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

Сегодня рассмотрим настройку SSL на примере наиболее популярного веб-сервера Nginx. Большинство хостинг-провайдеров поддерживают именно его.

Настройка SSL в Nginx с Let’s Encrypt

Мы будем устанавливать бесплатный сертификат от некоммерческого удостоверяющего центра Let’s Encrypt. Готовый к эксплуатации веб-сервер необходимо подготовить к дальнейшей установке SSL: перед началом процедуры требуется зарегистрировать домен и привязать его к конкретному аккаунту на хостинге. Сертификат выдается на определенное имя сайта.

Шаг 1: Настройка виртуального хоста

Если на веб-сервере еще не настраивался виртуальный хост, это нужно сделать вручную, иначе не получится установить SSL на Nginx. Например, для сайта test.ru конфигурация будет выглядеть так, как показано в нижеследующем примере. Команда просмотра:

$ sudo vi /etc/nginx/conf.d/test.conf

Простейшее содержимое выглядит так:

server {

listen 80;

server_name test.ru www.test.ru;

access_log /var/log/nginx/test.access.log main;

root /var/www/test.ru/public_html/;

index index.html index.htm;

location / {

try_files $uri $uri/ =404;

}

}

После создания файла рекомендуется проверить конфигурацию веб-сервера командой:

$ nginx -t

Если никаких ошибок не выдается, следующий шаг – перезагрузка Nginx: 

$ sudo systemctl restart nginx

Теперь нужно убедиться, что каталог /var/www/test.ru/public_html/ действительно существует. Если его нет, он создается вручную до последующих действий. В нем следует расположить какой-либо файл для проверки его доступности, например index.html с содержимым «Hi user». Поможет это сделать команда:

$ sudo mkdir -p /var/www/test.ru/public_html/

$ sudo vi /var/www/test.ru/public_html/index.html

Проверяется правильность действий через браузер или утилитой CURL:

$ curl test.ru

Шаг 2: Установка Certbot

Получать сертификаты SSL рекомендуется через клиента Certbot. Он автоматизирует часть работы по настройке протокола HTTPS. Инсталлировать его следует только из официального репозитория, чтобы исключить риски получения на сервер вредоносных программ. Команда для загрузки:

$ sudo apt install certbot certbot-python-nginx

Первый пакет содержит непосредственно саму утилиту, а второй подключает расширение, которое позволяет работать с веб-сервером Nginx. После установки программа сразу готова к применению, поэтому можно продолжать настройку.

Шаг 3: Получение сертификата

Приложение Certbot способно устанавливать сертификат автоматически. Но в нашей инструкции с помощью него будет только сгенерирован ключ, а установка в Nginx проведена вручную. Чтобы создать и подписать SSL нужно ввести команду:

$ sudo certbot certonly --nginx -d test.ru -d test.ru

После запуска в первый раз запрашивается email администратора. Туда будут отправляться письма об истечении срока действия сертификата (заодно и новости проекта). После ввода адреса следует согласиться с лицензионным соглашением и ответить на вопрос, допускается ли передача контакта партнерским организациям. После указания нужных реквизитов начнет создаваться SSL-сертификат.

Важно отметить, что сгенерированные файлы сертификата будут сохранены в каталоге /etc/letsencrypt/live/test.ru/. Там располагается следующий перечень модулей:

  • cert.pem – непосредственно сам сертификат;
  • chain.pem – файл цепочки;
  • privkey.pem – приватный ключ, он прописывается в поле ssl_sertificate_key;
  • fullchain.pem – совмещенное содержимое первых двух файлов.

Последнее вносится в поле ssl_sertificate. Остается инсталлировать ключ безопасности в систему веб-сервера и проверить подключение нового протокола.

Шаг 4: Настройка виртуального хоста для SSL

С этой целью создается конфигурационный файл виртуального хоста. Он активирует функционал прослушивания порта 443. Также в нем прописывается ряд директив для настройки SSL. Команда для создания:

$ sudo vi /etc/nginx/conf.d/test-ssl.conf

Примерное содержимое файла:

server {

listen 443 ssl;

server_name test.ru www.test.ru;

access_log /var/log/nginx/test.ru.access.log main;

root /var/www/test.ru/public_html/;

index index.html index.htm;

ssl on;

ssl_certificate /etc/letsencrypt/live/test.ru/fullchain.pem;

ssl_certificate_key /etc/letsencrypt/live/test.ru/privkey.pem;

location / {

try_files $uri $uri/ =404;

}

}

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

$ sudo systemctl restart nginx

Все, сертификат подключен. Можно приступать к дальнейшим работам по созданию и публикации сайта. Он будет защищен по самым современным стандартам (шифрованием трафика).

Проверить подключение можно при помощи сайта SSLlabs. Нужно открыть браузер и ввести ссылку, в которой следует заменить имя домена на собственное: https://www.test.ru/ssltest/analyze.html?d=test.ru&latest.

Шаг 5: Дополнительная безопасность

По умолчанию в системе остаются включенными все доступные протоколы обмена информацией. Поэтому для увеличения уровня безопасности рекомендуется вручную отключить ряд из них, при этом принудительно активировать наиболее эффективный режим. Здесь понадобится директива ssl_protocols:

$ sudo vi /etc/nginx/conf.d/test-ssl.conf

ssl_protocols TLSv1.2 TLSv1.3;

В этом примере подключается поддержка протоколов семейства TSL версии 1.2 и 1.3. При высоких требованиях к безопасности рекомендуется активировать все существующие методы шифрования и вручную добавить шифры, которые хочется использовать.

Шифр SSL

На завершающем этапе остается сообщить серверу, что нужно использовать именно их, а не те, что предлагает клиент:

ssl_prefer_server_ciphers on;

Перед дальнейшим использованием стоит перезапустить веб-сервер и еще раз убедиться, что все внесенные изменения приняты и SSL-сертификат определяется без ошибок.

Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться

Обновление сертификата

Если планируется использовать сертификат SSL от Let’S Encrypt более 90 дней, его придется систематически обновлять. И делать это рекомендуется заранее, минимум за 30 дней до истечения срока действия. Иначе возникают риски временной неработоспособности протокола SSL, когда сайт перестает открываться по прежним ссылкам (браузеры предупреждают об ошибке).

Выполняется процедура обновления командой:

$ certbot renew

После ее ввода будут проверены все ранее выпущенные и установленные в системе сертификаты и заново созданы те, по которым сроки подходят к концу. Если хочется настроить автоматический перевыпуск SSL, нужно ввести команду cron:

$crontab -e

30 2 * * 1 /usr/bin/certbot renew >> /var/log/renew-ssl.log

В таком виде она каждый понедельник в 2:30 будет выполнять проверку актуальности всех SSL и записывать результат в файл с указанным названием.

echo -e "Все про серверы, сети, хостинг и еще раз серверы" >/dev/pts/0

Комментарии

Александр +2
11 июля в 2023
Если сайты на латыни, всё летает. А когда на Великом и могучем (с переводом на xn--...), то nginx начинает возмущаться
С помощью соцсетей
У меня нет аккаунта Зарегистрироваться
С помощью соцсетей
У меня уже есть аккаунт Войти
Инструкции по восстановлению пароля высланы на Ваш адрес электронной почты.
Пожалуйста, укажите email вашего аккаунта
Ваш баланс 10 ТК
1 ТК = 1 ₽
О том, как заработать и потратить Таймкарму, читайте в этой статье
Чтобы потратить Таймкарму, зарегистрируйтесь на нашем сайте