Почтовый сервер доступа не запускается: не читается сертификат
Служба доступа к почте читает сертификаты до перехода на непривилегированного пользователя, но при перезагрузке настроек делает это уже от своего пользователя. Из-за этого запуск проходит, а перезагрузка отказывает — сочетание, которое сбивает с толку.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Нет прав на закрытый ключ
Закрытый ключ обычно доступен только root. При чтении от пользователя службы возникает отказ.
-
В файле нет полной цепочки
Клиенты требуют промежуточные сертификаты. Без них соединение не устанавливается, хотя служба запускается.
-
Путь указывает на обновляемую ссылку
После продления сертификата ссылка меняется, но служба держит в памяти прежний файл. Перезагрузка настроек обязательна.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Сообщения службы о сертификатах и правах.
journalctl -u dovecot -n 30 --no-pagerКакой сертификат служба отдаёт прямо сейчас.
openssl s_client -connect 127.0.0.1:993 </dev/null 2>/dev/null | openssl x509 -noout -datesПрава на закрытые ключи.
sudo ls -l /etc/dovecot/private/Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Закрытый ключ обычно доступен только root. При чтении от пользователя службы возникает отказ.
- Как проверить
-
Посмотрите права на ключ и пользователя службы.
sudo ls -l /etc/dovecot/private/ 2>/dev/null systemctl show dovecot -p User -p Group 2>/dev/null
- Как исправить
- Дайте доступ к ключу через группу службы, не меняя права на файл шире. Копия ключа с общими правами — не решение.
- Почему происходит
- Клиенты требуют промежуточные сертификаты. Без них соединение не устанавливается, хотя служба запускается.
- Как проверить
-
Посмотрите содержимое файла сертификата.
sudo grep -c "BEGIN CERTIFICATE" /etc/dovecot/certs/fullchain.pem 2>/dev/null openssl s_client -connect 127.0.0.1:993 -showcerts </dev/null 2>/dev/null | grep -c "BEGIN CERTIFICATE"
- Как исправить
- Укажите файл с полной цепочкой, а не только сертификат узла. Порядок в файле важен: сначала сертификат узла, затем промежуточные.
- Почему происходит
- После продления сертификата ссылка меняется, но служба держит в памяти прежний файл. Перезагрузка настроек обязательна.
- Как проверить
-
Посмотрите пути и дату сертификата в памяти службы.
sudo ls -l /etc/letsencrypt/live/*/fullchain.pem 2>/dev/null openssl s_client -connect 127.0.0.1:993 </dev/null 2>/dev/null | openssl x509 -noout -dates 2>/dev/null
- Как исправить
- Добавьте перезагрузку настроек службы в действие после продления сертификата. Без этого клиенты будут видеть просроченный сертификат при обновлённых файлах на диске.
Пример вывода
Закрытый ключ недоступен пользователю службы. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
dovecot[7200]: master: Error: service(imap-login): command startup failed, error code 89
dovecot[7200]: ssl-params: Can't open private key file /etc/dovecot/private/server.key: Permission denied
systemd[1]: dovecot.service: Main process exited, code=exited, status=89
Связанные ошибки
- nginx: ошибки сертификата при запуске (SSL_CTX_use_PrivateKey) nginx не запускается из-за сертификата: не совпадает ключ, неполная цепочка, файл повреждён, нет прав на чтение ключа.
- certbot: проверка владения доменом не проходит Обновление сертификата не удаётся: занят порт 80, недоступен каталог проверки, перехвачен редиректом.
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- Брокер сообщений не открывает слушатель: права и пути Служба падает при открытии слушателя: занятый порт, нет прав на сертификаты или каталог постоянного хранения.
- Обратный прокси не получает сертификаты: файл хранения недоступен Автоматический выпуск сертификатов не проходит: права на файл хранения слишком широкие или файл недоступен.
- Почтовая служба пишет в аварийный журнал и не принимает письма Служба сообщает о невозможности писать журналы или создавать файлы очереди: права на каталоги нарушены.
- Служба на Java не может проверить сертификат собеседника Соединения отклоняются: хранилище доверенных сертификатов недоступно, устарело или не содержит нужного центра.
- Служба не читает закрытый ключ TLS Права на закрытый ключ: как дать доступ службе, не открывая ключ всем. Группы и каталоги сертификатов.
Где встречается чаще всего
Источники
- Документация Dovecot: настройка шифрования
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено ключом с правами только для root.