Установка TLS/SSL на NGINX Ubuntu

Автор Itworkroom

Lets Encrypt это центр сертификации (CA, Certificate Authority), который позволяет создавать и устанавливать бесплатные сертификаты TLS/SSL (криптографические протоколы, обеспечивающие защищённую передачу данных между узлами), тем самым позволяя использовать шифрованный HTTPS на веб-сервере. На данный момент процесс получения сертификатов автоматизирован за счёт наличия клиента Certbot, который делает большую часть необходимых операций и процедур.

В этом руководстве показан пример использования Certbot для получения бесплатного SSL сертификата для Nginx на Ubuntu 18.04, а также настройка автоматического продление этого сертификата.

Подготовка

Подразумевается, что у Вас перед тем как начать устанавливать SSL сертификат, уже имеется:

  • Сервер с установленной и настроенной ОС Ubuntu 18.04, включая настройку не-привилегированного (non-root) пользователя с привилегиями sudo
  • Установленный и настроенный Веб-сервер Nginx
  • Зарегистрированное доменное имя. В руководстве мы будем использовать example.com.
  • Для вашего сервера настроены обе записи DNS, указанные ниже.
    • Запись A для example.com, указывающая на публичный IP адрес вашего сервера.
    • Запись A для www.example.com, указывающая на публичный IP адрес вашего сервера.

Также убедитесь, что у вас есть настроенный серверный блок для вашего домена. В данном руководстве мы будем использовать конфигурационный файл /etc/nginx/sites-available/example.com в качестве примера.

Установка Certbot

Перед началом использования Lets Encrypt для получения SSL сертификата установим Certbot на ваш сервер.

Сначала добавим репозиторий в систему:

sudo add-apt-repository ppa:certbot/certbot

Установим пакет Certbot для Nginx с помощью apt:

sudo apt install python-certbot-nginx

Теперь Certbot готов к использованию, но для того, чтобы он мог настроить SSL для Nginx, нам сначала необходимо проверить настройки Nginx.

Проверка настроек Nginx

Certbot должен иметь возможность найти корректный серверный блок в вашей конфигурации Nginx для того, чтобы автоматически настроить сертификат SSL. Для этого он будет искать директиву в конфигурации server_name, которая совпадает с доменным именем, для которого вы запросите сертификат.

Если вы следовали инструкциям по настройке серверного блока в руководстве по установке Nginx, у вас должен быть серверный блок для вашего домена по адресу /etc/nginx/sites-available/example.com с уже правильно настроенной директивой server_name.

Для проверки откройте файл серверного блока в любом текстовом редакторе:

vi nano /etc/nginx/sites-available/example.com

Найдите директиву server_name, и проверьте корректность её написания.

/etc/nginx/sites-available/example.com

server_name example.com www.example.com;

Если она выглядит как в примере, то закройте файл и переходите к следующему шагу.

Если она не выглядит так, как описано выше, скорректируйте директиву server_name, и проверьте корректность синтаксиса конфигурационного файла командой:

sudo nginx -t

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

sudo systemctl reload nginx

Теперь Certbot может находить и обновлять корректный серверный блок.

Далее необходимо скорректировать настройки файрвола (межсетевого экрана) для пропуска HTTPS трафика.

Разрешение HTTPS в firewall:

Если в качестве firewall используется ufw (это можно проверить командой sudo ufw status, если стоит статус enable, то он включен и используется), то непосредственно на веб-сервере добавьте следующие правила:

Для того, чтобы разрешить трафик HTTPS, разрешим профиль Nginx Full и удалим избыточный профиль Nginx HTTP:

sudo ufw allow ‘Nginx Full’

sudo ufw delete allow ‘Nginx HTTP’

Проверим внесённые изменения:

sudo ufw status

Теперь настройки ufw должны выглядеть следующим образом:

Вывод

Status: active

To Action From

— —— —-

OpenSSH ALLOW Anywhere

Nginx Full ALLOW Anywhere

OpenSSH (v6) ALLOW Anywhere (v6)

Nginx Full (v6) ALLOW Anywhere (v6)

Теперь мы можем запустить Certbot и получить наши сертификаты.

Получение SSL сертификата

Certbot предоставляет несколько способов получения сертификатов SSL с использованием плагинов. Плагин для Nginx берёт на себя настройку Nginx и перезагрузку конфигурации, когда это необходимо. Для использования плагина выполните команду:

sudo certbot —nginx -d example.com -d www.example.com

Эта команда запускает certbot с плагином —nginx, ключи -d определяют имена доменов, для которых должен быть выпущен сертификат.

Если это первый раз, когда вы запускаете certbot, вам будет предложено ввести адрес электронной почты и согласиться с условиями использования сервиса. После этого certbot свяжется с сервером Lets Encrypt, а затем проверит, что вы действительно контролируете домен, для которого вы запросили сертификат.

Если всё прошло успешно, certbot спросит, как вы хотите настроить конфигурацию HTTPS.

Вывод

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.

1: No redirect — Make no further changes to the webserver configuration.
2: Redirect — Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you’re confident your site works on HTTPS. You can undo this change by editing your web server’s configuration

Select the appropriate number [1-2] then [enter] (press ‘c’ to cancel):

1 пункт предлагает не использовать перенаправление с http на https, т.е у Вас будет работать сайт по обоим протоколам.

2 пункт предлагает сделать полное перенаправление, будет использоваться только безопасный протокол https.

Выберите подходящий для Вас вариант и нажмите ENTER. Конфигурация будет обновлена, а Nginx перезапущен для применения изменений. Certbot выдаст сообщение о том, что процесс прошёл успешно, и где хранятся ваши сертификаты:

Ваши сертификаты загружены, установлены и работают. Попробуйте перезагрузить ваш сайт с использованием https:// и вы увидите значок безопасности в браузере. Он означает, что соединение с сайтом зашифровано.

Проверка автоматического обновления сертификата

Сертификаты Lets Encrypt действительны только 90 дней. Пакет certbot, делает это путём добавления скрипта обновления в /etc/cron.d. Этот скрипт запускается раз в день и автоматически обновляет любые сертификаты, которые закончатся в течение ближайших 30 дней.

Для тестирования процесса обновления мы можем сделать тестовый запуск (dry run) certbot:

sudo certbot renew —dry-run

Если вы не видите каких-либо ошибок в результате выполнения этой команды, то всё в полном порядке. При необходимости Certbot будет обновлять ваши сертификаты и перезагружать Nginx для применения изменений. Если автоматическое обновление по какой-либо причине закончится ошибкой, Lets Encrypt отправит электронное письмо на указанный вами адрес электронной почты с информацией о сертификате, который скоро закончится.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *