Как защитить 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 на вашем сервере, набрав:
- sudo yum install epel-release
После включения репозитория вы можете получить пакет certbot-nginx
, набрав:
- sudo yum install certbot-nginx
Теперь клиент certbot
Let’s Encrypt установлен и готов к использованию.
Шаг 2 — Настройка Nginx
Если вы еще не установили Nginx, вы можете сделать это сейчас. Репозиторий EPEL уже должен быть включен из предыдущего раздела, поэтому вы можете установить Nginx, набрав:
- sudo yum install nginx
Затем запустите Nginx с помощью systemctl
:
- sudo systemctl start nginx
Certbot может автоматически настраивать SSL для Nginx, но он должен иметь возможность найти правильный блок server
в вашей конфигурации. Для этого он ищет директиву server_name
, которая соответствует домену, для которого вы запрашиваете сертификат. Если вы начинаете с новой установки Nginx, вы можете обновить файл конфигурации по умолчанию с помощью vi
или вашего любимого текстового редактора:
- sudo vi /etc/nginx/nginx.conf
Найдите существующую строку server_name
:
server_name _;
Замените подчеркивание _
своим доменным именем:
server_name example.com www.example.com;
Сохраните файл и выйдите из редактора. Если вы используете vi
, введите :x
, затем y
при появлении запроса, чтобы сохранить и выйти. Проверьте синтаксис изменений конфигурации с помощью:
- sudo nginx -t
Если это работает без ошибок, перезагрузите Nginx, чтобы загрузить новую конфигурацию:
- sudo systemctl reload nginx
Теперь Certbot сможет найти правильный блок server
и обновить его. Теперь мы обновим наш брандмауэр, чтобы разрешить HTTPS-трафик.
Шаг 3 — Обновление брандмауэра
Если у вас включен брандмауэр, убедитесь, что порты 80 и 443 открыты для входящего трафика. Если вы не используете брандмауэр, вы можете пропустить этот шаг.
Если у вас запущен брандмауэр firewalld, вы можете открыть эти порты, набрав:
- sudo firewall-cmd --add-service=http
- sudo firewall-cmd --add-service=https
- sudo firewall-cmd --runtime-to-permanent
Если у вас запущен брандмауэр iptables, команды, которые вам нужно запустить, сильно зависят от вашего текущего набора правил. Для начального набора правил вы можете добавить доступ по протоколам HTTP и HTTPS, набрав:
- sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
- sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Теперь мы готовы запустить Certbot и получить наши сертификаты.
Шаг 4 — Получение сертификата
Certbot предоставляет различные способы получения SSL-сертификатов с помощью различных подключаемых модулей. Плагин Nginx позаботится о перенастройке Nginx и перезагрузке конфигурации при необходимости:
- sudo certbot --nginx -d example.com -d www.example.com
Это запускает certbot
с плагином --nginx
, используя -d
, чтобы указать имена, для которых мы хотим, чтобы сертификат был действительным.
Если вы впервые запускаете certbot
, вам будет предложено ввести адрес электронной почты и принять условия обслуживания. После этого certbot
свяжется с сервером Let’s Encrypt, а затем запустит вызов, чтобы убедиться, что вы контролируете домен, для которого запрашиваете сертификат. Конфигурация будет обновлена, и Nginx перезагрузится, чтобы принять новые настройки. certbot
завершится сообщением о том, что процесс прошел успешно и где хранятся ваши сертификаты:
OutputIMPORTANT 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
.
- 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, их документация — хорошее место для начала.