Обновляю сертификат letsencrypt с помощью apache mod_md в ubuntu 18.04

Аватар пользователя jura12 jura12 9 мая 2020 в 4:23

После получения ssl сертификатов с помощью certbot возникает вопрос его обновления. сложно настроить crontab на точную дату обновления. тем более может возникнуть ситуация что сервер в данный момент не сможет обновить сертификат и операцию надо повторить. есть много утилит по работе с сертификатами и вероятно есть несколько способов его обновления . мне попался на глаза модуль apache mod_md. с нескольких попыток удалось его настроить.

Для работы модуля надо установить последнюю версию apache и mod_md

sudo add-apt-repository ppa:ondrej/apache2
sudo apt update
sudo apt upgrade
sudo apt install mod_md
sudo a2enmod mod_md

В настройки своего ssl сайта добавляем критически важные строки

MDCertificateAgreement accepted
MDomain mydomain.ru www.mydomain.ru

<VirtualHost *:443>
  Protocols h2 http/1.1 acme-tls/1
  ServerAdmin username@yandex.ru
 

полный рабочий конфиг я выложу ниже. а пока смотрим в /var/log/apache2/error.log и устраняем сообщения об ошибках пока не появится

[Date] [md:notice] [pid nnn] AH10059: The Managed Domain mydomain.com has been setup
and changes will be activated on next (graceful) server restart.

после этого надо надо отключить строки SSLCertificateFile и SSLCertificateKeyFile и перезапустить apache
sudo systemctl restart apache2

посмотреть результат работы удаленно можно с помощью броузера links по адресу http://127.0.0.1/server-status или http://127..0.0.1/md-status


окончательный вариант ssl конфига сайта выглядит так:

<IfModule mod_ssl.c>

MDCertificateAgreement accepted
MDomain mydomain.ru www.mydomain.ru

<Location "/md-status">
  SetHandler md-status
</Location>

<VirtualHost *:443>
  Protocols h2 http/1.1 acme-tls/1

  ServerAdmin username@yandex.ru
  ServerName www.mydomain.ru
  DocumentRoot /var/www/drupal8/web
  <Directory /var/www/drupal8/web/>
     Options +FollowSymlinks -MultiViews
     AllowOverride All
  </Directory>

ServerAlias mydomain.ru
Include /etc/letsencrypt/options-ssl-apache.conf
#SSLCertificateFile /etc/letsencrypt/live/mydomain.ru/fullchain.pem
#SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.ru/privkey.pem
</VirtualHost>
</IfModule>

Комментарии

Аватар пользователя ivnish ivnish 9 мая 2020 в 7:49

jura12 wrote: сложно настроить crontab на точную дату обновления

Серьёзно? А зачем? LE не позволит обновить сертификат, если не осталось 3 дня до окончания его срока. Все просто дёргают certbot раз в день

Аватар пользователя adano adano 9 мая 2020 в 12:02

LE не позволит обновить сертификат, если не осталось 3 дня до окончания его срока.

Ну почти правильно.

Our certificates are valid for 90 days. You can read about why here. There is no way to adjust this, there are no exceptions. We recommend automatically renewing your certificates every 60 days.

Аватар пользователя jura12 jura12 10 мая 2020 в 17:18

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

Аватар пользователя adano adano 9 мая 2020 в 12:09

Если системно генерировать сертификат, то ничего не нужно делать с кронтабом... Все сразу будет автоматизированно.
* sudo letsencrypt certonly ...

P.S. С wildcard есть нюансы.

Аватар пользователя bsyomov bsyomov 11 мая 2020 в 14:21

jura12 wrote: осле получения ssl сертификатов с помощью certbot возникает вопрос его обновления. сложно настроить crontab на точную дату обновления. тем более может возникнуть ситуация что сервер в данный момент не сможет обновить сертификат и операцию надо повторить.

Нет никакого вопроса. Certbot прекрасно умеет обновлять сертификаты. Начинает пытаться обновить он заранее, и если что-то не складывается, обновится сертификат при следующем запуске.
Его просто надо запускать пару раз в день, никакой точной даты не нужно. Если с обновлением что-то не так, придёт письмо, и надо будет внимательно почитать логи - что не так...
Вполне вероятно, что проблема просто в старой версии certbot, например, или не правильной конфигурации веб сервера, если обновление не проходит систематично - в реальности проблемы обновления бывают _крайне_ редко, если всё настроено и обновлено.

Аватар пользователя jura12 jura12 15 июня 2020 в 19:43

действительно ранее я работал со старым certbot и видел как индусы обновляют сертификат через cron.
современный certbot запускает свой сервис который автоматически обновляет. поэтому у меня возник сейчас конфликт (certbot сервис и mod_md) . пришлось этот сервис отключить. поработаю пока с модом апаче.

Аватар пользователя bsyomov bsyomov 15 июня 2020 в 21:07

Его можно запускать через systemd timer или через крон. Это не важно совершенно, на самом деле.

Аватар пользователя jura12 jura12 15 июня 2020 в 21:11

по-моему он запускался через systemd timer . я занимался несколько недель назад. по-моему я просто удалил certbot.

Аватар пользователя bsyomov bsyomov 16 июня 2020 в 12:47

Вполне возможно, зависит от дистрибутива.
Я просто к тому, что это один и тот же код, просто запускается разными методами, не более.Там ничего глобально не изменилось.