Вернуться назад

certbot

Обновление сертификата

Обновить сертификать вручную:


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