Обновите домены, используя certbot и DNS challenge

9

Я создал несколько сертификатов 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

Вопросов:

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

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

Merc
источник

Ответы:

4

Обновленный ответ (см. Оригинальный ответ ниже)

В своем первоначальном ответе я акцентировал внимание на том, что предоставленный вами скрипт не требуется при использовании 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команду, которую вы разместили
  • Подождите, пока команда покажет вам запись TXT DNS
  • Создать эту запись TXT
  • Продолжить certbotкоманду
  • Получить сертификат для указанного домена
  • Удалите запись TXT (поскольку она нужна вам только для создания, а новая - для обновления)

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

Malte
источник
Фантастика, сообщу, сработает ли она через пару месяцев!
Merc
Да, как правило, не используйте --manual. Вся цель --manualсостоит в том, чтобы заставить интерактивный режим. Но вы можете использовать плагины DNS, такие как aws или digitalocean, certonlyбез --manualопции, и они будут автоматически обновляться до 90 дней.
Бобпол
Спасибо за ввод, я обновил ответ.
Мальте