DAT CMS

DAT CMS создаёт сертификаты, хранит их в базе данных и передаёт подходящие сертификаты сервисам выпуска и проверки. Поведение протокола описано в спецификации DAT CMS.

Создание конфигурации запуска

Сервис управления сертификатами DAT

dns

Сервер

PortПо умолчанию: 8088
HostnameПо умолчанию: Auto
terminal

Команда запуска

bash
Проверить API
bash
database

База данных

Кеш APIПо умолчанию: 60
verified_user

Сертификат DAT

Алгоритм подписи
Алгоритм шифрования
Задержка выпуска сертификатасекундhelp
Период выпуска DATсекундhelp
TTL DAT (срок жизни)секундhelp
Расписание генерации сертификатов DAT (Cron)help
lock

Контроль доступа

Master token
Создание сертификатов DAT и получение версии сервера
Full Cert token
Получение полных сертификатов (Pair Key, Hash Key)
Verify Cert token
Получение сертификатов Verify (только Verify Key)

Запуск с Docker

Запускайте контейнер от имени пользователя без прав root. При использовании SQLite подключите каталог данных с правом записи. Передавайте токены и пароли базы данных через механизм внедрения секретов, а не через историю команд.

docker run --rm --name dat-cms -p 8088:8088 \
  --user 10001:10001 \
  -v "$PWD/dat-cms-data:/data" \
  -e PORT=8088 \
  -e DB_URI='sqlite:/data/data.db' \
  -e TOKEN_MASTER='replace-with-a-secret' \
  -e TOKEN_CERT_FULL='replace-with-a-secret' \
  -e TOKEN_CERT_VERIFY='replace-with-a-secret' \
  sarolab/dat-cms

База данных

Используйте DB_URI, чтобы настроить подключение к SQLite, PostgreSQL или MySQL. MariaDB подключается по протоколу MySQL. CMS кэширует результаты запросов сертификатов как snapshot и продолжает обслуживать последний успешный snapshot при временном сбое обновления хранилища.

DB_CACHE_SECS задаёт интервал обновления snapshot, а DB_QUERY_TIMEOUT_SECS ограничивает время запросов обновления. Если успешного snapshot ещё нет и хранилище недоступно для чтения, сервис возвращает DAT_STORE_UNAVAILABLE.

Роли доступа

Переменная окруженияРазрешениеКто использует
TOKEN_MASTERРегистрация сертификатов и получение защищённой версииЭксплуатация
TOKEN_CERT_FULLПолучение полных сертификатовСервисы выпуска DAT
TOKEN_CERT_VERIFYПолучение сертификатов только для проверкиСервисы проверки и расшифрования

Каждая переменная принимает разделённые запятыми буквенно-цифровые токены. Если список токенов роли пуст, endpoints этой роли открываются и в журнал записывается предупреждение.

Создание сертификатов

Роль master регистрирует сертификат, указывая алгоритм подписи, алгоритм шифрования, задержку распространения, период выпуска и TTL. Во время задержки распространения сервисы синхронизируют новый сертификат до того, как он станет доступен для выпуска.

Интеграция клиента

  1. Для сервисов выпуска используйте полный токен и endpoint полных сертификатов.
  2. Для сервисов проверки используйте токен проверки и параметр verify-only.
  3. Проверьте результат первой синхронизации; если запуск должен завершиться с ошибкой, вызовите API немедленной синхронизации.
  4. Если включена автоматическая синхронизация, закройте менеджер при завершении работы приложения.

См. руководства по библиотекам с описанием builder и завершения работы для каждого языка.

Эксплуатационные проверки

  • /health и /version/api сообщают состояние без аутентификации.
  • /version требует master token, если эта роль настроена.
  • Собирайте журналы из стандартного вывода и стандартного потока ошибок.
  • Передавайте сигналы завершения и оставляйте время на закрытие базы данных и scheduler.

Kubernetes

Согласуйте порт контейнера и probes с портом сервиса, а каталог данных подключите с правом записи для пользователя без прав root. Внедряйте токены и параметры подключения к базе данных через Secrets.

securityContext:
  runAsNonRoot: true
  runAsUser: 10001
  runAsGroup: 10001
containers:
  - name: dat-cms
    image: sarolab/dat-cms
    ports: [{ containerPort: 8088 }]
    readinessProbe: { httpGet: { path: /health, port: 8088 } }
    livenessProbe: { httpGet: { path: /health, port: 8088 } }