DAT CMS

DAT CMS crea certificados, los almacena en una base de datos y entrega los certificados adecuados a los servicios emisores y verificadores. El comportamiento del protocolo se describe en la especificación de DAT CMS.

Crear una configuración de ejecución

Servicio de gestión de certificados DAT

dns

Servidor

PortPredeterminado: 8088
HostnamePredeterminado: Auto
terminal

Comando de ejecución

bash
Comprobar API
bash
database

Base de datos

Caché de APIPredeterminado: 60
verified_user

Certificado DAT

Algoritmo de firma
Algoritmo de cifrado
Retraso de emisión del certificadosegundoshelp
Periodo de emisión de DATsegundoshelp
TTL de DAT (duración)segundoshelp
Programa de generación de certificados DAT (Cron)help
lock

Control de acceso

Master token
Generar certificados DAT y consultar la versión del servidor
Full Cert token
Obtener certificados Full (Pair Key, Hash Key)
Verify Cert token
Obtener certificados Verify (Verify Key Only)

Ejecutar con Docker

Ejecuta el contenedor como usuario no root. Si usas SQLite, monta un directorio de datos con permiso de escritura. Proporciona los tokens y las contraseñas de la base de datos mediante un mecanismo de inyección de secretos, no mediante el historial de comandos.

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

Base de datos

Usa DB_URI para configurar una conexión SQLite, PostgreSQL o MySQL. MariaDB se conecta mediante el protocolo MySQL. CMS almacena en caché los resultados de las consultas de certificados como una instantánea y sigue sirviendo la última instantánea correcta si falla temporalmente una actualización del almacén.

DB_CACHE_SECS establece el intervalo de actualización de la instantánea y DB_QUERY_TIMEOUT_SECS limita las consultas de actualización. Si no existe ninguna instantánea correcta y no puede leerse el almacén, el servicio devuelve DAT_STORE_UNAVAILABLE.

Roles de acceso

Variable de entornoPermisoUsado por
TOKEN_MASTERRegistrar certificados y obtener la versión protegidaOperaciones
TOKEN_CERT_FULLObtener certificados completosServicios emisores de DAT
TOKEN_CERT_VERIFYObtener certificados exclusivos para verificaciónServicios de verificación y descifrado

Cada variable acepta tokens alfanuméricos separados por comas. Si la lista de tokens de un rol está vacía, sus endpoints quedan abiertos y se registra una advertencia.

Generación de certificados

El rol master registra un certificado indicando el algoritmo de firma, el algoritmo de cifrado, el retraso de propagación, el periodo de emisión y el TTL. Durante el retraso de propagación, los servicios sincronizan el certificado nuevo antes de que pueda emitir.

Integración del cliente

  1. Usa el token completo y el endpoint de certificados completos para los servicios emisores.
  2. Usa el token de verificación y la opción verify-only para los servicios verificadores.
  3. Comprueba el resultado de la primera sincronización; si el inicio debe fallar, llama a la API de sincronización inmediata.
  4. Cuando la sincronización automática esté activa, cierra el gestor al finalizar la aplicación.

Consulta las guías de las bibliotecas para conocer el builder y el cierre de cada lenguaje.

Comprobaciones operativas

  • /health y /version/api informan del estado sin autenticación.
  • /version exige el master token si ese rol está configurado.
  • Recopila los registros de la salida estándar y la salida de error estándar.
  • Reenvía las señales de cierre y deja tiempo para que la base de datos y el scheduler se cierren.

Kubernetes

Ajusta el puerto del contenedor y los probes al puerto del servicio, y monta el directorio de datos con permiso de escritura para el usuario no root. Inyecta los tokens y los datos de conexión a la base de datos mediante 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 } }