Я уже писал об установке и автоматическом продлении wildcard сертификата от Letsencrypt, но всё оказалось немного не так.
Когда пришла пора обновления сертификата, то он почему то автоматически не обновился, а в логах появилась такая запись: “PluginError: An authentication script must be provided with –manual-auth-hook when using the manual plugin non-interactively.“
То есть то, ради чего всё и затевалось, автоматическое продление сертификата, не сработало.
Разобравшись в проблеме, делюсь её решением ))
Оглавление
Получение нового или обновление существующего сертификата Let’s Encrypt
Во-первых пришлось перенести DNS с Mail.Ru на один из поддерживаемых certbot, я выбрал Cloudflare, всё написанное ниже относится к нему. Список всех поддерживаемых DNS можно посмотреть на официальном сайте утилиты certbot и по сути принцип работы с ними не сильно отличается.
Так же существует утилита lego, которая существенно расширяет список поддерживаемых DNS серверов. Скачать её можно на github, есть так же подробная документация с примерами использования.
Но вернёмся к “нашим баранам”.
Итак, DNS сервер мы перенесли, сменили записи у регистратора имён, подождали и убедились что всё работает. Далее займемся небольшой подготовительной работой.
В домашнем каталоге создадим папку .secrets и в ней файл cloudflare.ini. Название папки и файла на ваше усмотрение, права на неё только пользователю root.
chmod 0700 /root/.secrets/ chmod 0400 /root/.secrets/cloudflare.ini
Содержание файла cloudflare.ini (email и api key соответственно ваши):
dns_cloudflare_email = "grib69@gmail.com" dns_cloudflare_api_key = "xxxxxxxxxx_Cloudflar_Global_API_Key_xxxxxxxxxx"
API Key получаем в личном кабинете Cloudflare
На этом подготовительная работа закончена и приступаем непосредственно к получению нового или обновлению существующего сертификата, для этого выполним следующую команду:
certbot certonly \ --dns-cloudflare \ --dns-cloudflare-credentials /root/.secrets/cloudflare.ini \ --dns-cloudflare-propagation-seconds 25 \ -d grib69.ru -d *.grib69.ru \ --preferred-challenges dns-01
На выходе должны получить следующее:
Автоматизация обновлений сертификата
А вот с автоматизацией обновлений в данном случае всё действительно очень просто. Создаем файл letsencrypt.renew, даём ему права на исполнение и забрасываем в /etc/cron.weekly. Содержание файла:
#!/bin/bash /usr/bin/certbot renew --post-hook "systemctl reload nginx"
Ну или добавляем данную команду в crontab, кому как удобнее.
20.07.2021 Наверное всё же более правильно будет так:
systemctl enable certbot-renew.timer
systemctl start certbot-renew.timer
А все post-hook скрипты размещать в /etc/letsencrypt/renewal-hooks/post
На этом надеюсь эпопея с автообновлением сертификата закончилась ))
Первый вариант статьи здесь.
P.S. Если данная статья была Вам полезна, не поленитесь поставить лайк. Если остались вопросы не стесняйтесь задавать их в комментариях, будем разбираться вместе ))
Leave a Comment