Назад | Перейти на главную страницу

Продлить домены с помощью certbot и DNS-запроса

Я создал несколько SSL-сертификатов для нескольких доменов автономным методом. Меня интересуют только сертификаты, без серверной интеграции.

Сейчас они на продление. Итак, я побежал:

certbot -d example.com --manual --preferred-challenges dns certonly

И следовал инструкциям для каждого домена (добавляя необходимую запись DNS для каждого из них). Таким образом, мне не пришлось останавливать сервер и получать новые сертификаты.

Мое (смутное) понимание всего этого заключается в том, что в настоящее время не существует способа автоматически обновлять сертификаты с помощью запроса DNS. А может у вас не получается автоматически обновлять сертификаты для "ручного" метода?

Во всяком случае, я написал этот сценарий:

#!/bin/bash

for i in renewal/*;do
  n=${i:8:-5};
  echo $n;
  # echo "\n" | certbot --text --agree-tos -d $n --manual --preferred-challenges dns --expand --renew-by-default  --manual-public-ip-logging-ok certonly;
done

На данный момент в renewal каталог ВСЕ домены имеют:

аутентификатор = руководство

И:

pref_challs = dns-01

Вопросы:

Обновленный ответ (см. Исходный ответ ниже)

В моем первоначальном ответе я сосредоточился на том факте, что предоставленный вами сценарий не требуется при использовании renew команда. Однако я не удостоверился, что renew команда действительно применима в этом сценарии.

Как пишут cdhowie и bobpaul в комментариях: certbot renew - это неинтерактивный режим, который - в сочетании с вызовом DNS - требует, чтобы вы предоставили сценарий через --manual-auth-hook параметр. Указанный сценарий должен иметь возможность устанавливать TXT запись. Вы также можете предоставить другой сценарий для очистки впоследствии через --manual-cleanup-hook параметр.

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

Если вы не укажете эти параметры, certbot завершится ошибкой:

/opt/certbot # certbot renew --force-renewal
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/foobar.w9f.de.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Could not choose appropriate plugin: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',)

Если вы хотите обновить сертификаты в ручном режиме, вам необходимо повторно запустить команды, которые вы использовали для получения сертификатов. В этом случае ваш сценарий - хороший вариант, поскольку certonly команда не просматривает существующие сертификаты / конфигурацию и вместо этого требует, чтобы вы указали доменные имена либо через -d параметр или в интерактивном режиме.


когда я запустил "certbot Renew", обновит ли он их все автоматически без использования моего скрипта?

TL; DR: Да, должно.

Давайте посмотрим на документация certbot:

Начиная с версии 0.10.0 Certbot поддерживает действие обновления, чтобы проверить все установленные сертификаты на предмет приближающегося истечения срока действия и попытаться их обновить. Самая простая форма - это просто

certbot обновить

Все идет нормально.

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

Это должно ответить на ваш вопрос. Остерегайтесь: я не знаю, насколько хорошо certbot может справиться с ситуациями, когда вы перемещаете сертификаты в разные каталоги.

Позже в том же абзаце:

Тот же плагин и параметры, которые использовались при первоначальной выдаче сертификата, будут использоваться для попытки продления, если вы не укажете другие плагины или параметры. в отличие certonly, renew действует для нескольких сертификатов и всегда принимает во внимание, истекает ли срок действия каждого из них.

Так да; certbot должен обновить все ваши сертификаты без помощи вашего скрипта.


Как мне создать новый сертификат, используя для начала DNS-запрос?

Что не так с командой, которую вы разместили в начале сообщения? certbot -d example.com --manual --preferred-challenges dns certonly получит сертификат для example.com, используя вызов dns.

Шаги по созданию сертификата:

  • Запустить certbot команда, которую вы отправили
  • Подождите, пока команда покажет вам запись DNS TXT
  • Создайте эту запись TXT
  • Продолжайте certbot команда
  • Получите сертификат для указанного домена
  • Удалите запись TXT (так как она вам нужна только для создания и новая для продления)

Если вы хотите автоматизировать этот полный процесс, вы можете взглянуть на такой инструмент, как Лего который поддерживает пару Провайдеры DNS.