Как использовать Certbot в автономном режиме для получения SSL-сертификатов Let’s Encrypt в Ubuntu 18.04

Вступление

Let’s Encrypt - это сервис, предлагающий бесплатные сертификаты SSL через автоматизированный API. Самый популярный клиент Let’s Encrypt -EFF’sCertbot.

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

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

Предпосылки

Перед началом этого урока вам понадобится:

  • Сервер Ubuntu 18.04 с пользователем без полномочий root, с поддержкой sudo и базовым брандмауэром, как описано вthis Ubuntu 18.04 server setup tutorial.

  • Доменное имя, указывающее на ваш сервер, что вы можете сделать, следуя «https://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean[Как установить Обновление имени хоста с помощью DigitalOcean] ». В этом руководстве будет использоватьсяexample.com.

  • Порт 80or 443 не должен использоваться на вашем сервере. Если служба, которую вы пытаетесь защитить, находится на машине с веб-сервером, который занимает оба этих порта, вам потребуется использовать другой режим, напримерwebroot mode Certbot.

[[step-1 -—- install-certbot]] == Шаг 1. Установка Certbot

Ubuntu включает клиент Certbot в свой репозиторий по умолчанию, но он немного устарел. Вместо этого мы установим его из официального PPA-репозитория Certbot для Ubuntu илиPersonal Package Archive. Это альтернативные репозитории, которые упаковывают более свежее или более неясное программное обеспечение. Сначала добавьте репозиторий:

sudo add-apt-repository ppa:certbot/certbot

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

sudo apt update

И, наконец, установите пакетcertbot:

sudo apt install certbot

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

[[step-2 -—- running-certbot]] == Шаг 2 - Запуск Certbot

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

sudo ufw allow 80

Замените443 выше, если это порт, который вы используете. ufw выведет подтверждение того, что ваше правило было добавлено:

OutputRule 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

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

OutputIMPORTANT 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 2018-10-09. 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

Мы получили наши сертификаты. Давайте посмотрим, что мы скачали и как использовать файлы с нашим программным обеспечением.

[[step-3 -—- configuring-your-application]] == Шаг 3 - Настройка вашего приложения

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

sudo ls /etc/letsencrypt/live/example.com
Outputcert.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».

Для получения дополнительной информации о других имеющихся файлах обратитесь к разделу «https://certbot.eff.org/docs/using.html#where-are-my-certificates[Where are Мои сертификаты]» документов Certbot.

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

[[step-4 -—- handling-certbot-automatic-Renewals]] == Шаг 4 - Обработка автоматического продления Certbot

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

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

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

sudo nano /etc/letsencrypt/renewal/example.com.conf

Откроется текстовый файл с некоторыми параметрами конфигурации. Добавьте свой крючок в последнюю строку:

/etc/letsencrypt/renewal/example.com.conf

renew_hook = systemctl reload rabbitmq

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

sudo certbot renew --dry-run

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

Заключение

В этом руководстве мы установили клиент Certbot Let Encrypt, загрузили сертификат SSL в автономном режиме и включили автоматическое продление с помощью перехватчиков возобновления. Это должно дать вам хорошее начало для использования сертификатов Let Encrypt с сервисами, отличными от вашего обычного веб-сервера.

Для получения дополнительной информации обратитесь кCertbot’s documentation.

Related