Обратный прокси не получает сертификаты: файл хранения недоступен
Обратные прокси с автоматическим выпуском сертификатов хранят их в одном файле и требуют от него узких прав: в нём лежат закрытые ключи. Слишком широкие права — отказ, слишком узкие относительно пользователя службы — тоже отказ.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Права на файл хранения слишком широкие
Служба отказывается работать с файлом, доступным другим пользователям: в нём закрытые ключи.
-
Проверка владения доменом не проходит
Выпуск требует подтверждения владения. Закрытый порт или занятый адрес означают отказ, и сертификат не появляется.
-
Служба не имеет права занять привилегированные порты
Прокси должен слушать порты ниже тысячи. Без нужной возможности процесс получает отказ при открытии слушателя.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Сообщения о выпуске сертификатов и правах.
journalctl -u traefik -n 40 --no-pager | grep -iE "acme|permission"Права и владелец файла хранения сертификатов.
sudo ls -l /etc/traefik/acme.jsonПользователь службы и выданные возможности.
systemctl show traefik -p User -p AmbientCapabilitiesРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Служба отказывается работать с файлом, доступным другим пользователям: в нём закрытые ключи.
- Как проверить
-
Посмотрите права файла и пользователя службы.
sudo ls -l /etc/traefik/acme.json 2>/dev/null systemctl show traefik -p User -p StateDirectory 2>/dev/null
- Как исправить
-
Установите права только для владельца и сделайте владельцем пользователя службы. Никакой другой пользователь этот файл видеть не должен.
sudo chmod 600 /etc/traefik/acme.json && sudo chown traefik: /etc/traefik/acme.json
- Почему происходит
- Выпуск требует подтверждения владения. Закрытый порт или занятый адрес означают отказ, и сертификат не появляется.
- Как проверить
-
Посмотрите сообщения о попытках выпуска.
journalctl -u traefik -n 40 --no-pager | grep -iE "acme|challenge|certificate"
- Как исправить
- Обеспечьте доступность способа подтверждения: свободный порт для проверки по сети либо доступ к управлению зоной для проверки записями.
- Почему происходит
- Прокси должен слушать порты ниже тысячи. Без нужной возможности процесс получает отказ при открытии слушателя.
- Как проверить
-
Посмотрите возможности службы и слушателей.
systemctl show traefik -p AmbientCapabilities -p User 2>/dev/null sudo ss -tlnp | grep -E ":80|:443"
- Как исправить
-
Выдайте службе возможность занимать привилегированные порты вместо запуска от root. Это заметно уменьшает последствия возможной уязвимости.
[Service] AmbientCapabilities=CAP_NET_BIND_SERVICE
Пример вывода
Права на файл хранения слишком широкие. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
traefik[7800]: level=error msg="Unable to get ACME account: permissions 644 for /etc/traefik/acme.json are too open, please use 600"
traefik[7800]: level=error msg="Unable to obtain ACME certificate for domains \"example.org\""
Связанные ошибки
- certbot: проверка владения доменом не проходит Обновление сертификата не удаётся: занят порт 80, недоступен каталог проверки, перехвачен редиректом.
- bind: Permission denied при привязке к порту Отказ при привязке к порту: обычно порт ниже 1024 у службы от непривилегированного пользователя. Как дать возможность CAP_NET_BIND_SERVICE.
- status=218/CAPABILITIES в systemd Код 218/CAPABILITIES: не удалось применить набор возможностей процесса из CapabilityBoundingSet= или AmbientCapabilities=.
- Брокер сообщений не открывает слушатель: права и пути Служба падает при открытии слушателя: занятый порт, нет прав на сертификаты или каталог постоянного хранения.
- Почтовый сервер доступа не запускается: не читается сертификат Служба падает при чтении сертификата: права на закрытый ключ, неверный порядок цепочки или путь к ней.
- Прокси не запускается: каталоги кеша не созданы Служба падает при открытии кеша: каталоги не размечены, нет прав или не хватает места.
- Служба на Java не может проверить сертификат собеседника Соединения отклоняются: хранилище доверенных сертификатов недоступно, устарело или не содержит нужного центра.
- Служба не читает закрытый ключ TLS Права на закрытый ключ: как дать доступ службе, не открывая ключ всем. Группы и каталоги сертификатов.
Где встречается чаще всего
Источники
- Документация Traefik: хранение сертификатов
-
systemd.exec(5)
AmbientCapabilities= и привилегированные порты. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено файлом хранения с широкими правами.