Автор выбрал COVID-19 Relief Fund в качестве получателя пожертвований в рамках программы Write for DOnations.
Введение
большинство сертификатов Let’s Encrypt выдается с использованием проверки HTTP, что позволяет легко установить сертификаты на одном сервере. However, HTTP validation is not always suitable for issuing certificates for use on load-balanced websites, nor can it be used to issue wildcard certificates.
Проверка DNS позволяет проверять запросы на выдачу сертификатов с использованием записей DNS, а не путём обслуживания содержимого через HTTP. Это意味着 что сертификаты могут быть выданы одновременно для кластера веб-серверов, работающих за load balancer, или для системы, которая недоступна прямо через интернет. Wildcard certificates are also supported using DNS validation.
Инструмент acme-dns-certbot используется для подключения Certbot к третьему стороннему DNS-серверу, где рекомендательные записи для проверки сертификата могут быть установлены автоматически через API при запросе сертификата. преимущество этого в том, что вам не требуется интегрировать Certbot прямо с вашего аккаунта DNS-провайдера, и вам также не требуется предоставлять ему неограниченный доступ к полной конфигурации DNS, что благотворно сказывается на безопасность.
Доверенные зоны DNS используются для перенаправления поиска записей для проверки сертификата на третью стороннюю DNS-сервис, поэтому после завершения исходной настройки вы можете запрашивать сертификаты по мере необходимости без какого-либо ручного валидации.
Другая ключевая особенность acme-dns-certbot заключается в том, что он может использоваться для выдачи сертификатов для отдельных серvers, которые могут работать за лицевой прокси-сервер или иным образом недоступны прямо по HTTP. Традиционная проверка сертификатов HTTP не может быть использована в этих ситуациях, unless you set the validation files on each and every server. The acme-dns-certbot tool is also useful if you want to issue a certificate for a server that isn’t accessible over the internet, such as an internal system or staging environment.
В этом руководстве вы будете использовать钩子 acme-dns-certbot для Certbot, чтобы выпустить Let’s Encrypt сертификат с помощью проверки DNS.
Предусловия
Для выполнения этого руководства вам потребуется:
-
Сервер Ubuntu 18.04, настроенный следуя первоначальному настройке сервера с Ubuntu 18.04, включая неroot пользователя с правами sudo.
-
Доменное имя, для которого можно приобрести сертификат TLS, включая возможность добавления DNS записей. В этом конкретном примере мы будем использовать
your-domain
иsubdomain.your-domain
, а также*.your-domain
для wildcard сертификата. Тем не менее, это может быть настроено для других доменов, поддоменов или wildcards, если это необходимо.
Когда вы будете готовы, зайдите в свой сервер под своим неroot пользователем, чтобы начать.
Шаг 1 — установка Certbot
В этом шаге вы установите Certbot, который является программой для выдачи и управления сертификатами Let’s Encrypt.
Certbot доступен в официальных репозиториях Ubuntu Apt,然而, рекомендуется использовать репозиторий, который поддерживается разработчиками Certbot, так как в нём всегда доступна новейшая версия программы.
Начните с добавления репозитория Certbot:
Вы должны нажать ENTER
, чтобы принять предложение и добавить новый репозиторий в вашу систему.
Далее установите пакет Certbot:
После завершения установки вы можете проверить, успешно ли была установлена Certbot:
Это выведет что-то вроде следующего:
В этом шаге вы установили Certbot.下一步, вы скачиваете и устанавливаете hook acme-dns-certbot.
Шаг 2 — установка acme-dns-certbot
Теперь, когда основнойprogramma Certbot установлено, вы можете скачать и установить acme-dns-certbot, который позволит Certbot работать в режиме DNS-верification.
Начните с загрузки собственности скрипта:
Примечание: Как лучшее практическое рекомендационное замечание, пожалуйста, убедитесь, что вы просмотрели это Github репозиторий и скрипт перед его выполнением. Вы также можете сначала создать для него forк репозитория и затем использовать скрипт acme-dns-certbot.py
. Этот forк обеспечивает дополнительный слой безопасности, чтобы скрипт оставался под нашей управлением и был менее склонен к непроверенным изменениям.
После завершения скачивания установите скрипт как исполняемый:
Потом, используя свой любимый текстовый редактор, отредактируйте файл и настройте первую строку, чтобы принудить использование Python 3:
Добавьте 3
в конце первой строки:
#!/usr/bin/env python3
. . .
Это необходимо, чтобы скрипт использовал последнюю поддерживаемую версию Python 3, а не устаревшую версию Python 2.
По завершении сохраните и закройте файл.
Наконец, переместите скрипт в директорию Certbot Let’s Encrypt, чтобы Certbot мог его загрузить:
В этом шаге вы скачали и установили hook acme-dns-certbot. Затем вы можете начать процесс установки и работать в направлении выдачи вашего первого сертификата.
Шаг 3 — настройка acme-dns-certbot
Для начала использования acme-dns-certbot вам нужно выполнить процесс инициализации и выпустить至少 одный сертификат.
Начните с выполнения Certbot, чтобы заставить его выпустить сертификат с использованием проверки DNS. Это запустит скрипт acme-dns-certbot и вызовет процесс инициализации:
Вы используете аргумент --manual
, чтобы отключить все автоматизированные функции интеграции Certbot. В этом случае вы просто выпускаете исходный сертификат, а не устанавливать его автоматически в сервисе.
Вы настраиваете Certbot на использование钩子 acme-dns-certbot с помощью аргумента --manual-auth-hook
. Вы выполняете аргумент --preferred-challenges
, чтобы Certbot дал предпочтение проверке DNS.
Вы также должны сообщить Certbot приостановить, прежде чем попытаться проверить сертификат, что вы делаете с помощью аргумента --debug-challenges
. Это для того, чтобы вам удалось установить DNS CNAME
запись(и) , требуемые acme-dns-certbot, о котором позже будет hablarse в этом шаге. Без аргумента --debug-challenges
, Certbot не приостановится, так что у вас не будет времени для внесения необходимых изменений в DNS.
Памятайте, что для каждого из доменов, которые вы хотите использовать, следует использовать аргументы -d
. Если вы хотите выпустить сертификат с универсальным знаком (*), убедитесь, что asterisk (*
) обрамлен обратной ссылкой (\
).
После выполнения стандартных шагов Certbot, вам, наконец, будет предложено сообщение, схожее следующего содержания:
вам нужно добавить необходимый DNS CNAME
запись в DNS-конфигурацию вашего домена. Это уполномочит ACME DNS-сервис управлять поддоменом _acme-challenge
, что позволит acme-dns-certbot установить необходимые DNS-записи для проверки запроса сертификата.
Если вы используете DigitalOcean в качестве DNS-провайдера, вы можете установить DNS-запись в вашем контрол-панели:
рекомендуется установить TTL (время жизни) примерно в 300 секунд, чтобы помочь ускорить процесс распространения изменений по записи.
как только вы настроите DNS-запись, вернитесь в Certbot и нажмите ENTER
, чтобы проверить запрос сертификата и закончить процесс выдачи.
Это займет несколько секунд, после чего вы увидите сообщение, подтверждающее выдачу сертификата:
вы уже в первый раз запустили acme-dns-certbot, настроили необходимые DNS-записи и успешно выдали сертификат.下一步, вы настроите автоматическое возобновление вашего сертификата.
Шаг 4 — Использование acme-dns-certbot
В этом последнем шаге вы будете использовать acme-dns-certbot для выдачи дополнительных сертификатов и продления существующих.
Первым, так как вы успешно выдали至少 один сертификат с использованием acme-dns-certbot, вы можете продолжать выдавать сертификаты для того же идентификатора DNS без необходимости добавлять еще один DNS CNAME
запись. Тем не менее, если вы хотите получить сертификат для другого поддомена или полностью нового доменного имени, вам потребуется добавить еще один CNAME
запись.
Например, вы могли бы выдать еще один отдельный сертификат с неограниченным знаком * без необходимости повторять проверку:
Тем не менее, если вы попытаетесь выдать сертификат для поддомена, вам потребуется добавить CNAME
запись для поддомена:
Это покажет вывод, схожий с исходным настроением, которое вы выполняли в Шаге 3:
Теперь, когда вы сможете использовать acme-dns-certbot для выдачи сертификатов, также стоит рассмотреть процесс продления.
Когда ваши сертификаты приближаются к истечению срока действия, Certbot может автоматически их продлевать для вас:
Процесс продления может выполняться без вмешательства пользователя от начала до конца и сохраняет все настройки, которые вы указали во время инициализации.
Для проверки, что это работает без необходимости ждать более ближайшую дату истечения срока действия, можно запустить дry run. Это будет имитировать процесс продления без каких-либо реальных изменений в вашей конфигурации.
Вы можете запустить дry run с использованием стандартного комманда renew
, но с аргументом --dry-run
:
Это выведет что-то вроде следующего, что обеспечит уверенность в том, что процесс продления работает правильно:
В этой последней стадии вы выпустили еще один сертификат и затем испытали автоматический процесс продления Certbot.
Заключение
В этой статье вы установили Certbot с acme-dns-certbot, чтобы выпускать сертификаты с использованием DNS-валидации. Это открывает возможность использования wildcard-сертификатов, а также управления большим набором уникальных веб-серверов, находящихся за лайоуд балансером.
Убедитесь, что вы следуют изменениям в репозитории acme-dns-certbot, так как всегда рекомендуется использовать最新支持ную версию.
Если вы хотите узнать больше о acme-dns-certbot, можете проверить документацию для проекта acme-dns, который является серверным элементом acme-dns-certbot:
Программное обеспечение acme-dns также может быть самому размещено, что может быть полезно, если вы работаете в среде с высокой безопасностью или сложных сред.
Кроме того, можно изучить технические детали проверки ACME DNS, изучив соответствующий раздел официального документа RFC, который описывает, как работает процесс: