Как использовать Certbot в автономном режиме для получения SSL-сертификатов Let's Encrypt в Debian 9
Вступление
Let's Encrypt - это сервис, предлагающий бесплатные SSL-сертификаты через автоматизированный API. Самый популярный клиент Let's Encrypt - EFF 's Certbot.Certbot предлагает различные способы проверки вашего домена, получения сертификатов и автоматической настройки Apache и Nginx. В этом руководстве мы обсудим автономный режим Certbot и его использование для защиты других типов служб, таких как почтовый сервер или брокер сообщений, такой как RabbitMQ.
Мы не будем обсуждать детали конфигурации SSL, но когда вы закончите, у вас будет действительный сертификат, который автоматически обновляется. Кроме того, вы сможете автоматизировать перезагрузку службы для получения обновленного сертификата.
Предпосылки
Перед началом этого урока вам понадобится:- Сервер Debian 9 с пользователем без полномочий root, пользователем sudo и базовым брандмауэром, как описано в этом руководстве по настройке сервера Debian 9.
- Доменное имя указывало на ваш сервер. В этом руководстве будет использоваться example.com повсюду.
- Порт 80 или 443 должен быть не использован на вашем сервере. Если сервис вы пытаетесь обеспечить на компьютере с веб - сервером, который занимает обе эти порты, вам нужно использовать другой режим, например, Certbot в WebRoot режиме или в режиме вызова DNS на основе.
Шаг 1 - Установка Certbot
Debian 9 включает клиент Certbot в свой репозиторий по умолчанию, и он должен быть достаточно современным для базового использования. Если вам нужно выполнить задачи на основе DNS или использовать другие более новые функции Certbot, вам следует вместо этого установить из репозитория, stretch-backports как указано в официальной документации Certbot.Используйте apt для установки certbot пакета:
sudo apt install certbot
Вы можете проверить свою установку, попросив certbot вывести ее номер версии:
certbot --version
Output
certbot 0.28.0
certbot 0.28.0
Теперь, когда у нас установлен Certbot, давайте запустим его, чтобы получить наш сертификат.
Шаг 2 - Запуск Certbot
Certbot должен ответить на криптографический вызов, созданный API Let's Encrypt, чтобы доказать, что мы контролируем наш домен. Для этого используются порты 80(HTTP) или 443(HTTPS). Откройте соответствующий порт в брандмауэре:sudo ufw allow 80
Замените 443 выше, если это порт, который вы используете. ufw выведет подтверждение, что ваше правило было добавлено:
Output
Rule added
Rule added (v6)
Rule added
Rule added (v6)
Теперь мы можем запустить Certbot, чтобы получить наш сертификат. Мы будем использовать эту --standalone опцию, чтобы сообщить Certbot о необходимости решения проблемы с помощью своего собственного встроенного веб-сервера. --preferred-challenges Инструктирует Certbot использовать порт 80 или порт 443. Если вы используете порт 80, вы хотите --preferred-challenges http. Для порта 443 это было бы --preferred-challenges tls-sni. Наконец, -d флаг используется для указания домена, для которого вы запрашиваете сертификат. Вы можете добавить несколько -d вариантов, чтобы охватить несколько доменов в одном сертификате.
sudo certbot certonly --standalone --preferred-challenges http -d example.com
При запуске команды вам будет предложено ввести адрес электронной почты и принять условия обслуживания. После этого вы должны увидеть сообщение о том, что процесс прошел успешно и где хранятся ваши сертификаты:
Output
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/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
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/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/example.com
Output
cert.pem chain.pem fullchain.pem privkey.pem README
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».
Для получения дополнительной информации о других имеющихся файлах обратитесь к разделу «Где мои сертификаты» документации Certbot.
Некоторому программному обеспечению потребуются его сертификаты в других форматах, в других местах или с другими разрешениями пользователя. Лучше всего оставить все в letsencrypt каталоге и не изменять какие-либо разрешения в нем (разрешения будут перезаписаны в любом случае при обновлении), но иногда это просто не вариант. В этом случае вам нужно написать скрипт для перемещения файлов и изменения прав доступа по мере необходимости. Этот скрипт нужно будет запускать всякий раз, когда Certbot обновляет сертификаты, о которых мы поговорим позже.
Шаг 4 - Обработка автоматических продлений Certbot
Сертификаты Let's Encrypt действительны только в течение девяноста дней. Это должно стимулировать пользователей автоматизировать процесс обновления их сертификатов. certbot Пакет, который мы установили заботится об этом для нас, добавляя возобновлять сценарий к /etc/cron.d. Этот скрипт запускается два раза в день и обновляет любой сертификат, срок действия которого истекает в течение тридцати дней.Поскольку наши сертификаты обновляются автоматически, нам все еще нужен способ запускать другие задачи после обновления. Нам нужно по крайней мере перезапустить или перезагрузить наш сервер, чтобы получить новые сертификаты, и, как уже упоминалось в шаге 3, нам, возможно, потребуется каким-то образом манипулировать файлами сертификатов, чтобы они работали с программным обеспечением, которое мы используем. Это цель варианта Certbot renew_hook.
Чтобы добавить renew_hook, мы обновляем файл конфигурации обновления Certbot. Certbot запоминает все детали того, как вы впервые получили сертификат, и будет работать с теми же параметрами при обновлении. Нам просто нужно добавить в наш крючок. Откройте файл конфигурации в вашем любимом редакторе:
sudo nano /etc/letsencrypt/renewal/example.com.conf
Откроется текстовый файл с некоторыми параметрами конфигурации. Добавьте свой крючок в последнюю строку:
renew_hook = systemctl reload rabbitmq
Измените приведенную выше команду на все, что вам нужно, чтобы перезагрузить сервер или запустить собственный скрипт проверки файлов. Обычно в Debian вы чаще всего будете использовать systemctl для перезагрузки сервиса. Сохраните и закройте файл, затем выполните пробный запуск Certbot, чтобы убедиться, что синтаксис в порядке:
sudo certbot renew --dry-run
Если вы не видите ошибок, все готово. Certbot настроен на обновление при необходимости и запуск любых команд, необходимых для получения вашего сервиса с использованием новых файлов.
Заключение
В этом руководстве мы установили клиент Certbot Let's Encrypt, загрузили сертификат SSL в автономном режиме и включили автоматическое продление с помощью перехватчиков возобновления. Это должно дать вам хорошее начало использования сертификатов Let's Encrypt с сервисами, отличными от вашего обычного веб-сервера.Для получения дополнительной информации, пожалуйста, обратитесь к документации Certbot.
Комментариев 0