TLS и каналы связи
Назначение
Клавдий использует TLS для всех каналов: веб-интерфейс, серверы IMAP и SMTP, внутрикластерный трафик между узлом и сервером хранилища, поиск (Solr). Сертификаты хранятся централизованно в зашифрованном виде в базе и применяются всеми ролями на узле — без раздельных файлов на диске.
Загрузка и замена сертификата через веб-интерфейс — см. {{ССЫЛКА:install.tls-web|Установка → Общие настройки → TLS-сертификат}}. Здесь — технические детали.
Источник сертификата
Сертификат выбирается в следующем приоритете:
-
Хранилище в базе (
config.tls_certificates,is_active=true) — приоритетнее. Загружается через веб-интерфейс. Расшифровывается (AES-256-GCM) и пишется во временный PEM-файл. -
Переменная окружения
KLVD_WEB_SSL_CERT(путь к PEM-файлу, сертификат и ключ в одном файле) — резерв, если в базе сертификата нет. - Отсутствие — только HTTP, без HTTPS. Не рекомендуется для рабочей эксплуатации.
При смене активного сертификата в базе фоновыйая pollerзадача tls.cert.watch (раз в 60 секунд) обсравнаруживает расхождение отпечаток сертификата и при изменении перезапускает слушатели (веб-интерфейса, IMAP, SMTP,SMTP и хранилище)а без перезапуска узла.
Веб-интерфейс
- Порт:
KLVD_WEB_LISTEN_PORT(по умолчанию8001). При наличии сертификатапслужба рабоднимтаетсяпо HTTPS. - Сертификат: из базы или
KLVD_WEB_SSL_CERT. - Принудительный HTTPS:
KLVD_WEB_FORCE_SSL=1— узел остановится с ошибкой при отсутствии сертификата (защита от случайного HTTP в рабочей эксплуатации).
IMAP и SMTP
- IMAP: сертификат из базы (тег
imap) илиKLVD_IMAP_SSL_CERT. См. {{ССЫЛКА:install.imap-service|Установка → СерверIMAPIMAP}}. - SMTP: сертификат из базы (тег
smtp) илиKLVD_SMTP_SSL_CERT. См. {{ССЫЛКА:install.smtp-service|Установка → СерверSMTPSMTP}}.
Внутрикластерный трафик хранилища (порт 8444)
Узел обращается к серверу хранилища (роль storage, порт KLVD_STORAGE_LISTEN_PORT, по умолчанию 8444) для чтения и записи чанков писем. Этот трафик тоже шифруется TLS — переиспользуется тот же активный сертификат из базы (тег storage).
Как это работает
-
Сервер хранилища (роль
storage):при запустартке загрузижает сертификат из базы→иподнимвключает HTTPS на порту 8444. Путь кPEMPEM-файлупубликусохраняется в контексте узла. -
URL узла хранилища регистрируется в
config.storages.urlсо схемойhttps://,(если сертификатесть) — клнастроерная видимость. ВнешнийURLадрес можно переопределяеитсяь черезKLVD_STORAGE_EXTERNAL_URL. -
Клиент
(на любойм узле):загрузижает сертификат из базы как CA для проверкифсоедикнения и передации,ётнастраиего ваетcurl.
Проверка сертификата — по умолчанию отключена
KLVD_STORAGE_SSL_VERIFY (по умолчанию 0):
| Значение | Поведение |
|---|---|
0 (по умолчанию) |
Проверка сертификата отключена. |
1 |
Строгая проверка: сертификат должен быть подписан доверенным центром сертификации, а имя или SAN |
Почему по умолчанию строгая провыерка отключена, по:скольку в типичновой инусталляцииновке узлы взаимодействуют внутри доверёенной сети. Си используют общий самоподписанный сертификат — self-signed(!), загружается из общей базы (узлы уже доверяют друг другу через базу). ВкДлючениея строгой проверки требуется сертификата от доверенного центра с именем, соотвпадаетствующим с KLVD_STORAGE_EXTERNAL_URL — это дополнительная инфраструктурная работа, не нужная для большинства развёртываний. При вобменешних с узлахми храненилищая через публичную сеть —строгую проверку рекомендуется включить.
Переменные окружения (TLS хранилища)
| Переменная | По умолчанию | Назначение |
|---|---|---|
KLVD_STORAGE_SSL_CERT |
(пусто) | Путь к PEM-файлу (резерв, если в базе сертификата нет). При наличии → HTTPS. |
KLVD_STORAGE_FORCE_SSL |
(пусто) | 1 → остановка при отсутствии сертификата (защита от случайного HTTP). |
KLVD_STORAGE_SSL_VERIFY |
0 |
1 → включить проверку сертификата (нужен сертификат от доверенного центра). |
KLVD_STORAGE_LISTEN_PORT |
8444 |
Порт сервера хранилища. |
KLVD_STORAGE_EXTERNAL_URL |
(пусто) | Внешний URL хранилища (если за обратным прокси или на другом хосте). Формат: http(s)://IP:порт. |
Поиск (Solr)
При локальном Solr контейнер klvd-solr принимолучает тот же сертификат (через секрет Docker secret) и поднимвключает HTTPS на порту 8983. Entrypoint(!)Скрипт запуска преонвебртиразует PEM в формат PKCS12 и настраивает Jetty. При внешнем Solr — HTTPS зависит от настройкиДля внешнего Solr;Solr использование HTTPS определяется его собственной конфигурацией; адрес укзазывдаеётся в KLVD_SOLR_URL.
Проверка сертификата Solr по умолчанию отключена (
KLVD_SOLR_SSL_VERIFY=0),self-signed(!))поэтому самоподписанный сертификат принимается. Для внешнего Solr с доверенастоящиным сертификатом—задайтеKLVD_SOLR_SSL_VERIFY=1иKLVD_SOLR_CA_PATH(с путьём кCA).CA.
Ротация сертификата
- Загрузите новый сертификат в веб-интерфейсе ([Общие настройки → TLS-сертификат → Загрузить]). Старый помечается как неактивный.
PollerФоновая задачаtls.cert.watch(в течение 60 секунд)обнаруживает смену отпечатка→ивыстпередавляеётфменеджеру ролей комагнду→ role-managerна перезапускаетслушателией(веб-интерфейса, IMAP,SMTP,SMTP и хранилище) нановом сертификате.- URL узла хранилища в
config.storages.urlобновиляется при следующемheartbeat.сигнале активности (heartbeat). СТа же фоновая задача обновляет сертификат Solrобновляетсяв/shared/solr-tls.pemтем же poller;. Solr применит его при следующем перезапуске (docker compose restart klvd-solr).
Ротация сертификата не требует перезапуска узла — слушатели перезапускаются автоматически. Веб-интерфейс кратко (около секунды) недоступен в момент перезапуска.
Самоподписанный сертификат
При установке генерируесоздаётся самоподписанный сертификат (CN=klvd-wui)., Бпоэтому браузер показывает предупреждените о нёедоверенном — на псервотификате время это нормально. Для рабочей эксплуатации замените на настегоящий сертификатом от доверенного центра (зсертификагрузцитеи через веб-интерфейс). Самоподписанный сертификат без SAN не пройходёит строгую проверку имени —, поэтому внутрикластерная проверка сертификата по умолчанию отключена.
См. также
{{ССЫЛКА:install.tls-web|Установка → Общие настройки → TLS-сертификат}} — загрузка через веб-интерфейс{{ССЫЛКА:maintenance.security-ops|Защита данных}} — общие принципы защиты{{ССЫЛКА:reference.env|Конфигурация: .env и docker-composecompose}} — переменные окружения
Навигация по книге
- Следующая статья: {{ССЫЛКА:reference.storage-encryption|Шифрование архива на диске
}}