Как стать автором
Обновить

Как настроить автоматическое обновление SSL-сертификатов Let’s Encrypt с помощью Certbot на Ubuntu

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров5.5K
Всего голосов 8: ↑3 и ↓5-2
Комментарии11

Комментарии 11

Есть acme.sh и выдача сертификатов без перезагрузки сервиса.

Если "фронтендер, бэкендер, может даже мобильщик" заходит на сервер и под root запускает что-то из статей в интернетах или по советам gpt, то...

Скрытый текст

Интересно, многие ли заметили, что с мая let's encrypt завязал с OCSP. И теперь кто использовал в nginx ssl_stapling столкнутся с:

он не требует остановки сервиса и просто создаёт специальный файл в директории сайта

Он создает файл в директории .well-known (имя директории начинается с точки). У веб серверов часто запрещено отдавать директории и файлы с именами, ничинающимися с точки - это делается на случай когда в директории с сайтом есть всякие там .git, .svn, .htaccess и тому подобные служебные штуки. Так что надо заблаговременно проверить конфиг вашего Apache или Nginx на предмет таких запретов.

Кроме того для получения wildcard сертификата необходимо не только размещать файл но еще и добавлять запись в DNS.

Достаточно просто разместить txt запись без .well-known для wildcard

Метод называется dns challenge, а ещё есть dns alias mode когда для проверки используется другой домен, тогда в случае слива токена ни чего не произойдёт с основным доменом.

В случае  stateless режима acme и например haproxy, то ни чего не создаётся, не обязательно иметь даже веб сервер за обратным прокси для получения сертификатов

Для пет проекта сойдет, в продакшин такое выпускать - сомнительно, очень сомнительньно.

За долгие годы работы с certbot убедился, что не все так просто с ним и приходится изворачиваться местами, новичкам (не смотря на то, что этот проект ориентирован на простоту) не всегда удается сделать нормально, а при запихивании во всякие докеры легче не становится.

Для фронтендеров и бекендеров, не девопсов всегда рекомендую Nginx Proxy Manager - это реверс прокси с cert bot из коробки. Если не надо перегонять петабайты данных, то проще поставить NPN в одном месте, а потом в нем уже прописать нужные сервисы. Как минимум

  1. Меньше проблем с сертификатами

  2. Не будет даунтайма на время перевыпуска и проверки сертификатов.

С этим скриптом получается, что сервис будет останавливаться каждый раз перед проверкой сертификата, даже если время перевыпуска еще не наступило, если упадет во время работы, то сервис может и не подняться

Из всей статьи разве что может быть полезно для кого-то информация про хуки. Всё остальное вообще не имеет никакого смысла, ибо просто ставишь certbot, даёшь команду на получение сертификата, пользуешься. Ничего вообще трогать не надо ни в Ubuntu, ни в Debian, ни в Fedora.

А вот чего реально не хватает в статье - информации о челленджах по получение сертификата. Есть про webroot, есть про standalone, но совершенно нет информации о получении сертификата через dns, которые позволяют получить в том числе и в wildcard сертификаты, не требуют остановки веб-сервера и вообще установку certbot и получение нужного сертификата можно хоть через ansible сделать.

А вот вся эта маета с настройкой таймеров и крона нужна для acme.sh и lego.

Интересно, я когда-то настроил через docker. Так будет быстрее наверное.

как-то все чрезмерно сложно у вас

cat /usr/local/etc/letsencrypt/renewal/mydomain.ru.conf
# renew_before_expiry = 30 days
version = 2.3.0
archive_dir = /usr/local/etc/letsencrypt/archive/mydomain.ru
cert = /usr/local/etc/letsencrypt/live/mydomain.ru/cert.pem
privkey = /usr/local/etc/letsencrypt/live/mydomain.ru/privkey.pem
chain = /usr/local/etc/letsencrypt/live/mydomain.ru/chain.pem
fullchain = /usr/local/etc/letsencrypt/live/mydomain.ru/fullchain.pem

# Options used in the renewal process
[renewalparams]
account = acc8b9bfe080d37449336cdgh6048b5d
authenticator = webroot
webroot_path = /usr/local/www/mydomain.ru,
server = https://acme-v02.api.letsencrypt.org/directory
key_type = ecdsa
post_hook = /root/bin/certbot-posthook.sh
[[webroot_map]]
mydomain.ru = /usr/local/www/mydomain.ru
cat /root/bin/certbot-posthook.sh
#!/bin/sh
postmap -F hash:/usr/local/etc/postfix/vmail_ssl.map
service postfix reload
service dovecot reload
apachectl graceful

а, certbot webroot чем не метод

Пока админ в отпуске, откроем 80 порт или выключим все что на нем висит или bind9 настроим. Кстати я думал уже 80 порт все закрывают.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации