Обновить сертификать вручную:
sudo certbot renew
# Проверка без реального обновления
# Это своего рода имитация обновления
sudo certbot renew --dry-run
Принудительное обновление:
# Если нужно обновить непросроченный сертификат:
sudo certbot renew --force-renewal
# Но тут следует быть осторожным:
# у Let's Encrypt есть лимиты.
# Слишком частые обновления могут привести к блокировке.
Можно обновить вот так:
sudo systemctl start certbot.service
certbot.service – это systemd-сервис, который запускает Certbot.
В systemd есть два связанных объекта:
# Посмотреть таймер:
systemctl list-timers | grep certbot
# Посмотреть, что внутри certbot.service:
systemctl cat certbot.service
# Посмотреть логи сервиса:
journalctl -u certbot.service
Но есть одна проблемка. При запущенном Nginx не получается обновить сертификат.
...
Раньше у меня к сайту было привязана два домена, а теперь остался только один. Теперь просто обновить сертификат не получится. Нужно удалить старый и создать новый.
# Посмотреть список сертификатов:
sudo certbot certificates
# Saving debug log to /var/log/letsencrypt/letsencrypt.log
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Found the following certs:
# Certificate Name: tupniki.ru
# Serial Number: 6667428995627c4128fe9eb64eb492a53ad
# Key Type: ECDSA
# Domains: tupniki.ru charge.mclang.ru kakashka.tupniki.ru mclang.ru my.mclang.ru www.charge.mclang.ru www.kakashka.tupniki.ru www.mclang.ru www.my.mclang.ru www.tupniki.ru
# Expiry Date: 2025-12-27 20:00:48+00:00 (INVALID: EXPIRED)
# Certificate Path: /etc/letsencrypt/live/tupniki.ru/fullchain.pem
# Private Key Path: /etc/letsencrypt/live/tupniki.ru/privkey.pem
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sudo certbot delete
# и выбираем tupniki.ru
И конечно нужно не забыть удалить из конфигов Nginx упоминания старых ssl-серификатов.
Раньше я создавал сертификат вот так:
sudo certbot certonly --standalone -d tupniki.ru -d www.tupniki.ru -d lala.tupniki.ru -d www.lala.tupniki.ru
До тех пор, пока сайт работал без Nginx, всё работало нормально. Но после установки Nginx стало проблемно обновлять сертификат. Приходилось вручную остановливать Nginx, запускать обновление, а затем опять запускать Nginx. При запущенном Nginx обновление не проходило. Certbot сам поднимает временный веб-сервер и общается через него с Let's Encrypt через 80-й порт. НО 80-й порт уже занят Nginx'ом и Certbot'у из-за этого не удаётся обновить сертификат.
Если используем Nginx, то (нужен python3-certbot-nginx):
# Сначала ставим плагин:
sudo apt update
sudo apt install python3-certbot-nginx
# А затем:
sudo certbot --nginx -d tupniki.ru -d www.tupniki.ru -d lala.tupniki.ru -d www.lala.tupniki.ru
В этом случае Certbot использует уже работающий Nginx: временно добавляет в конфиг нужные правила и проходит проверку через него. В этом случае не нужно останавливать Nginx-сервер для обновления сертификата.
ВАЖНО!!! При создании нового сертификата с nginx-плагином:
Далее создаём сертификат. Должен появиться каталог /etc/letsencrypt/live/tupniki.ru/. А в нём:
Все эти файлы – ссылки на файлы в папке ../../archive/tupniki.ru/
В моём случае порты 80 и 443 по-прежнему прослушивал процесс nginx, хотя я его останавливаю: sudo systemctl stop nginx. Скорее всего, процессы зависли.
Проверить, что слушает порты:
sudo ss -tulpn | grep -E ':80|:443'
# tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=651987,fd=5),("nginx",pid=651969,fd=5))
# tcp LISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=651987,fd=11),("nginx",pid=651969,fd=11))
# tcp LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=651987,fd=6),("nginx",pid=651969,fd=6))
# tcp LISTEN 0 511 [::]:443 [::]:* users:(("nginx",pid=651987,fd=12),("nginx",pid=651969,fd=12))
# Принудительно убиваем процессы:
sudo pkill -f nginx
После переустановки сертификата опять проблемы с правами.
Если я запускаю nginx от sudo, то nginx запускает дочерний worker-процесс от имени пользователя www-data.
ls -l /etc/letsencrypt/
# total 76
# drwx------ 3 mark mark 4096 Mar 22 20:16 archive
# drwx------ 3 mark mark 4096 Mar 22 20:16 live
# ...
# Правильные права на сертификаты:
sudo chgrp -R www-data /etc/letsencrypt/live /etc/letsencrypt/archive
sudo chmod -R 750 /etc/letsencrypt/live /etc/letsencrypt/archive
sudo chmod 640 /etc/letsencrypt/archive/mclang.ru/privkey1.pem
Рукопожатие:
curl -vk https://mclang.ru
Я добавил новое доменное имя gts.tupniki.ru на DNS-сервер. Теперь я хочу обновить сертификат таким образом, чтобы он покрывал ещё и gts.tupniki.ru, и www.gts.tupniki.ru.
sudo certbot --nginx \
-d tupniki.ru -d www.tupniki.ru \
-d lala.tupniki.ru -d www.lala.tupniki.ru \
-d gts.tupniki.ru -d www.gts.tupniki.ru
# Saving debug log to /var/log/letsencrypt/letsencrypt.log
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# You have an existing certificate that contains a portion of the domains you
# requested (ref: /etc/letsencrypt/renewal/tupniki.ru.conf)
# It contains these names: tupniki.ru, lala.tupniki.ru, www.tupniki.ru,
# www.lala.tupniki.ru
# You requested these names for the new certificate: tupniki.ru, www.tupniki.ru,
# lala.tupniki.ru, www.lala.tupniki.ru, gts.tupniki.ru, www.gts.tupniki.ru
# Do you want to expand and replace this existing certificate with the new
# certificate?
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# (E)xpand/(C)ancel:
# Выбираем E – expand