Автоматическое извлечение SSL-сертификатов Let’s Encrypt с помощью Certbot в Debian 10

Let’s Encrypt – бесплатный сервис доверенных SSL-сертификатов, которые выдаются через автоматизированный API. Разработанный EFF клиент Certbot является самым популярным клиентом Let’s Encrypt.

Certbot поддерживает много способов проверки домена, получения сертификатов и автоматической настройки Apache и Nginx. В этом руководстве вы узнаете, как настроить автономный режим Certbot и с его помощью защитить другие типы сервисов: почтовые серверы, брокеры сообщений типа RabbitMQ.

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

Требования

  • Сервер Debian 10, пользователь sudo и включенный брандмауэр (как описано здесь).
  • Доменное имя, направленное на сервер (в мануале используется условный example.com). Дополнительные инструкции можно найти в мануале Как настроить имя хоста.
  • Свободный порт 80 или 443. Если  у вас есть веб-сервер, оба порта будут заняты. В таком случае вы можете использовать Certbot в другом режиме, например, webroot.

1: Установка Certbot

В репозитории Debian 10 есть пакет Certbot, он достаточно новый, чтобы его использовать. Если вам нужно выполнять задачи, связанные с DNS, или использовать более новые функции Certbot, вам следует установить их из репозитория stretch-backports, как показано в официальной документации Certbot.

Обновите индекс:

sudo apt update

Затем установите пакет:

sudo apt install certbot

Вы можете проверить установку, попросив certbot вывести версию:

certbot --version
certbot 0.31.0

Теперь, когда у вас есть Certbot, давайте запустим его, чтобы получить сертификат.

2: Запуск Certbot

Certbot должен провести криптографическую проверку API-интерфейса Let’s Encrypt, чтобы доказать, что указанный домен принадлежит вам. Для этого используются порты 80 (HTTP) или 443 (HTTPS). Откройте соответствующий порт в брандмауэре:

sudo ufw allow 80

Чтобы открыть порт 443, укажите его в этой команде вместо 80.

Брандмауэр ufw сообщит, что правило добавлено в список:

Rule added
Rule added (v6)

Затем запустите Certbot, чтобы получить сертификат. Добавьте параметр —standalone, чтобы Certbot использовал встроенный веб-сервер для обработки проверки. Параметр —preferred-challenges позволяет Certbot использовать порты 80 или 443. Если вы используете порт 80, укажите —preferred-challenges http. Порт 443 указывается с помощью параметра

--preferred-challenges tls-sni. Флаг –d позволяет задать домен, для которого предназначен сертификат. Если сертификат будет использоваться для защиты нескольких доменов, добавьте несколько флагов –d.

Мы используем параметр —preferred-challenges http для демонстрации, а вы должны использовать тот параметр, который нужен вам. Запустите команду:

sudo certbot certonly --standalone --preferred-challenges http -d example.com

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

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 cert will expire on 2019-08-28. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- 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

3: Настройка приложения

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

sudo ls /etc/letsencrypt/live/your_domain
cert.pem  chain.pem  fullchain.pem  privkey.pem  README

Файл README содержит больше информации о каждом из этих файлов. Обычно нужны только два из них:

  • privkey.pem: это закрытый ключ сертификата. Его следует хранить в секрете, потому обычно каталог /etc/letsencrypt блокирует доступ, он доступен только пользователю root. Конфигурации программного обеспечения будут ссылаться на этот файл с помощью параметров ssl-certificate-key или ssl-certificate-key-file.
  • fullchain.pem: файл сертификата, связанный с промежуточными сертификатами. Большинство программ ссылается на него как на ssl-certificate.

Читайте также: Раздел Where are my certificates документации Certbot

Некоторые программы требуют, чтобы файлы сертификатов были в другом месте, в другом формате или имели другие привилегии. Лучше хранить все в каталоге letsencrypt и не менять привилегий (они все равно перезапишутся при обновлении сертификата), но иногда это мешает работе программы. В таком случае нужно написать сценарий для перемещения файлов и изменения привилегий. Этот сценарий нужно запускать во время обновления сертификатов Certbot.

4: Автоматическое обновление сертификатов Certbot

Сертификаты Let’s Encrypt действительны в течение 90 дней. Потому пользователи обычно автоматизируют процесс обновления сертификатов. Установленный ранее пакет certbot позаботится об этом, добавив сценарий обновления в /etc/cron.d. Этот сценарий запускается два раза в день и продлевает сертификат, срок действия которого истекает через тридцать дней.

При автоматическом обновлении сертификатов нужно найти способ запускать после этого другие задачи. Как минимум, нужно перезагрузить сервер, чтобы новые сертификаты начали работать. Как упоминалось в разделе 3, вам также может понадобиться подготовить файлы сертификатов, чтобы они не конфликтовали с другим программным обеспечением. Для этого Certbot предлагает опцию renew_hook.

Чтобы добавить эту опцию, обновите конфигурационный файл Certbot в каталоге renewal. Certbot запоминает все сведения о первом сертификате, при обновлении он будет запускаться с теми же параметрами. Нужно просто добавить renew_hook. Откройте файл:

sudo nano /etc/letsencrypt/renewal/your_domain.conf

Вставьте в конец файла такую строку:

renew_hook = systemctl reload rabbitmq

Обновите эту команду и укажите здесь задачи, которые нужно выполнить (например, перезагрузить сервер или запустить собственный сценарий для обработки файлов). Обычно в Debian для перезагрузки сервисов используют systemctl. Сохраните и закройте файл, затем выполните пробный прогон Certbot, чтобы убедиться, что синтаксис не содержит ошибок:

sudo certbot renew --dry-run

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

Заключение

Теперь вы знаете, как установить клиент Certbot на ваш сервер, получить SSL-сертификаты и автоматизировать их обновление.

Читайте также:

Tags: , , , ,