Поиск по сайту:

Как защитить Nginx с помощью Let's Encrypt на CentOS 7


Введение

Let’s Encrypt — это новый центр сертификации (ЦС), который позволяет получать и устанавливать бесплатные сертификаты TLS/SSL, тем самым обеспечивая шифрование HTTPS на веб-серверах. Он упрощает процесс, предоставляя программный клиент Certbot, который пытается автоматизировать большинство (если не все) необходимых шагов. В настоящее время весь процесс получения и установки сертификата полностью автоматизирован как на веб-серверах Apache, так и на Nginx.

В этом руководстве мы покажем вам, как использовать клиент certbot Let's Encrypt для получения бесплатного сертификата SSL и использования его с Nginx в CentOS 7. Мы также покажем вам, как автоматически обновлять ваш сертификат SSL. .

Предпосылки

Прежде чем следовать этому руководству, вам понадобится несколько вещей.

  • Сервер CentOS 7 с пользователем без полномочий root с правами sudo. Вы можете узнать, как настроить такую учетную запись пользователя, выполнив шаги 1–3 в нашем руководстве по начальной настройке сервера для CentOS 7.
  • Вы должны владеть или контролировать зарегистрированное доменное имя, с которым хотите использовать сертификат. Если у вас еще нет зарегистрированного доменного имени, вы можете зарегистрировать его у одного из многочисленных регистраторов доменных имен (например, Namecheap, GoDaddy и т. д.).
  • Запись A DNS, указывающая ваш домен на общедоступный IP-адрес вашего сервера. Это необходимо из-за того, как Let’s Encrypt проверяет, что вы являетесь владельцем домена, для которого он выдает сертификат. Например, если вы хотите получить сертификат для example.com, этот домен должен разрешаться на ваш сервер, чтобы процесс проверки работал. Наша установка будет использовать www.example.com в качестве доменных имен, поэтому необходимы обе записи DNS.

После того, как у вас есть все необходимые условия, давайте перейдем к установке клиентского программного обеспечения Let’s Encrypt.

Шаг 1 — Установка клиента Certbot Let’s Encrypt

Первым шагом к использованию Let’s Encrypt для получения SSL-сертификата является установка программного обеспечения certbot на ваш сервер. В настоящее время лучший способ установить это через репозиторий EPEL.

Включите доступ к репозиторию EPEL на вашем сервере, набрав:

  1. sudo yum install epel-release

После включения репозитория вы можете получить пакет certbot-nginx, набрав:

  1. sudo yum install certbot-nginx

Теперь клиент certbot Let’s Encrypt установлен и готов к использованию.

Шаг 2 — Настройка Nginx

Если вы еще не установили Nginx, вы можете сделать это сейчас. Репозиторий EPEL уже должен быть включен из предыдущего раздела, поэтому вы можете установить Nginx, набрав:

  1. sudo yum install nginx

Затем запустите Nginx с помощью systemctl:

  1. sudo systemctl start nginx

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

  1. sudo vi /etc/nginx/nginx.conf

Найдите существующую строку server_name:

server_name _;

Замените подчеркивание _ своим доменным именем:

server_name example.com www.example.com;

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

  1. sudo nginx -t

Если это работает без ошибок, перезагрузите Nginx, чтобы загрузить новую конфигурацию:

  1. sudo systemctl reload nginx

Теперь Certbot сможет найти правильный блок server и обновить его. Теперь мы обновим наш брандмауэр, чтобы разрешить HTTPS-трафик.

Шаг 3 — Обновление брандмауэра

Если у вас включен брандмауэр, убедитесь, что порты 80 и 443 открыты для входящего трафика. Если вы не используете брандмауэр, вы можете пропустить этот шаг.

Если у вас запущен брандмауэр firewalld, вы можете открыть эти порты, набрав:

  1. sudo firewall-cmd --add-service=http
  2. sudo firewall-cmd --add-service=https
  3. sudo firewall-cmd --runtime-to-permanent

Если у вас запущен брандмауэр iptables, команды, которые вам нужно запустить, сильно зависят от вашего текущего набора правил. Для начального набора правил вы можете добавить доступ по протоколам HTTP и HTTPS, набрав:

  1. sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
  2. sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

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

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

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

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

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

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

Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your certificate will expire on 2022-10-20. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

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

Шаг 5 — Настройка автоматического продления

Сертификаты Let’s Encrypt действительны только в течение девяноста дней. Это сделано для того, чтобы пользователи автоматизировали процесс обновления своих сертификатов. Нам нужно настроить регулярно запускаемую команду для проверки сертификатов с истекающим сроком действия и их автоматического обновления.

Чтобы запускать проверку обновления ежедневно, мы будем использовать cron, стандартную системную службу для запуска периодических заданий. Мы сообщаем cron, что делать, открывая и редактируя файл с именем crontab.

  1. sudo crontab -e

Ваш текстовый редактор откроет crontab по умолчанию, который на данный момент является пустым текстовым файлом. Вставьте следующую строку, затем сохраните и закройте ее:

. . .
15 3 * * * /usr/bin/certbot renew --quiet

Часть 15 3 * * * в этой строке означает «выполнять следующую команду в 3:15 утра каждый день». Вы можете выбрать любое время.

Команда renew для Certbot проверит все сертификаты, установленные в системе, и обновит те, срок действия которых истекает менее чем за тридцать дней. --quiet указывает Certbot не выводить информацию и не ждать ввода данных пользователем.

cron теперь будет запускать эту команду ежедневно. Все установленные сертификаты будут автоматически обновлены и перезагружены, когда до истечения срока их действия останется не более тридцати дней.

Для получения дополнительной информации о том, как создавать и планировать задания cron, вы можете ознакомиться с нашим руководством по использованию Cron для автоматизации задач в руководстве по VPS.

Заключение

В этом руководстве мы установили клиент Let’s Encrypt certbot, загрузили SSL-сертификаты для нашего домена, настроили Nginx для использования этих сертификатов и настроили автоматическое обновление сертификатов. Если у вас есть дополнительные вопросы об использовании Certbot, их документация — хорошее место для начала.