Обновленный ответ (см. Оригинальный ответ ниже)
В своем первоначальном ответе я акцентировал внимание на том, что предоставленный вами скрипт не требуется при использовании 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-провайдеров .