Назад | Перейти на главную страницу

Dovecot выдал сертификат с истекшим сроком действия?

Я уже некоторое время использую почтовый сервер Postfix / Dovecot (сервер Ubuntu 16.04) без каких-либо серьезных проблем. У меня также есть сертификат Let's Encrypt, выданный моему имени хоста, который я настраиваю в /etc/dovecot/conf.d/10-ssl.conf. Все прошло нормально, но, как вы знаете, они действительны только в течение 90 дней. У меня есть настройка certbot для автоматического обновления, которая также работает нормально.

Неожиданно сегодня и мой Thunderbird, и клиентский Thunderbird, и его iPhone начали жаловаться на недействительные сертификаты. Я проверил сертификаты через certbot certificates чтобы узнать, что сертификат, который я использую, полностью действителен и не просрочен. Проверка сертификата через Thunderbird показала мне, что срок действия сертификата истек накануне, что показало мне хэш, который не соответствует текущему сертификату.

В общем, похоже, что Dovecot выдает просроченный сертификат из какого-то «кеша». Перезапуск dovecot просто «волшебным образом» исправил это, но я хотел бы понять, что здесь произошло, поскольку мой DDG поиск в кешах сертификатов или что-то подобное в Dovecot не дал мне никаких результатов. Я упустил что-то очевидное? Кажется, я упустил из виду что-то очевидное, но не могу понять, что именно.

РЕДАКТИРОВАТЬ Это в основном ответ Вот но поскольку мой certbot обновляется на таймере systemctl вместо cronjob, я постараюсь дать ответ на эту ситуацию здесь для справок в будущем и для всех, кто находится в той же лодке, что и я.

Это в основном та же проблема, что и ответ Вот Джеральда Шнайдера. Однако, поскольку моя установка не зависит от задания cron, а от системного таймера, ответ немного отличается.

Let's Encrypt, по крайней мере, в Ubuntu позволит вам создавать ловушки, когда автоматическое обновление запускается по таймеру (проверьте, что с помощью systemctl list-timers и посмотрите, есть ли оно там).

Есть два основных события, к которым вы можете подключиться: развертывание и публикация. Поместите свои bash-скрипты в /etc/letsencrypt/renewal-hooks/deploy или /etc/letsencrypt/renewal-hooks/post папки соответственно. Развертывание будет запускаться при каждом обновлении сертификата индивидуально, публикация будет запускаться после завершения всех обновлений.

У сценария развертывания есть доступ к переменным $ RENEWED_DOMAINS и $ RENEWED_LINEAGE. Я поместил следующий скрипт в etc/letsencrypt/renewal-hooks/deploy:

  1 #!/bin/bash
  2 for domain in $RENEWED_DOMAINS
  3 do
  4         if [ "$domain" = my.mailserver.com ]
  5         then
  6                 doveadm reload >/dev/null
  7         fi
  8 done

Что будет перезагружать dovecot conf каждый раз, когда сертификат для my.mailserver.com (очевидно, заменяет его реальным доменом) повторно развертывается. Надеюсь, это поможет всем, кто это искал.