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

Опубликовано admin - пн, 13/04/2020 - 06:07

После получения 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>