menuDAT

DAT CMS

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

API

Сертификаты

shell
# generate certificate
curl -X POST http://localhost:8088/v1/cert

# get certificates
curl http://localhost:8088/v1/certs

# get certificates (verifying)
curl http://localhost:8088/v1/certs/verifying

Статус

shell
curl http://localhost:8088/health
curl http://localhost:8088/version
curl http://localhost:8088/version/api

Отладка (только в режиме отладки)

shell
DAT=$(curl -s -X POST http://localhost:8088/debug/dat -d \
'plain data 평문 데이터
secure data 암호 데이터')

DAT_PARSE=$(curl -s http://localhost:8088/debug/dat/"$DAT")

echo "\n"
echo "====================================================="
echo "DAT:"
echo "-----------------------------------------------------"
echo "$DAT"
echo "====================================================="
echo "DAT Parse:"
echo "-----------------------------------------------------"
echo "$DAT_PARSE"
echo "====================================================="

Docker

shell
# Docker example
# Single Server
docker run -d --name dat-cms -p 8088:80 \
  -e SINGLE_SERVER="HMAC-SHA512-MFS,IV-AES256-GCM" \
  sarolab/dat-cms

# Podman example
# Single Server With Debug Mode
podman run -d --name dat-cms -p 8088:80 \
  -e SINGLE_SERVER="HMAC-SHA512-MFS,IV-AES256-GCM" \
  -e DEBUG=1 \
  sarolab/dat-cms

Бинарный файл

https://github.com/saro-lab/dat/releases

Linux, Mac

shell
cp ./download-filename ./dat-cms
chmod +x dat-cms
export PORT=8088
export SINGLE_SERVER=CRON
# export DB_URI=postgresql://username:password@host:port/database
./dat-cms

Windows CMD

shell
copy download-filename dat-cms.exe

set PORT=8088
set SINGLE_SERVER=CRON
:: set DB_URI=postgresql://username:password@host:port/database
dat-cms.exe

Windows PowerShell

shell
cp download-filename dat-cms.exe

$env:PORT="8088"
# $env:DB_URI="postgresql://username:password@host:port/database"
$env:SINGLE_SERVER="CRON"
.\dat-cms.exe

Kubernetes

shell
vi dat.yml
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dat
  namespace: yournamespace
  labels:
    app: dat
spec:
  replicas: 2
  selector:
    matchLabels:
      app: dat
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 100
  template:
    metadata:
      labels:
        app: dat
    spec:
      imagePullSecrets:
        - name: nexus-registry-secret
      containers:
        - name: publisher-cms
          image: sarolab/dat-cms:###VERSION###
          ports:
            - containerPort: 80
#          env:
#            - name: DB_URI
#              value: "postgresql://username:password@host-not-local:port/database"
          volumeMounts:
            - name: logs
              mountPath: /logs
          readinessProbe:
            httpGet:
              path: /health
              port: 80
            initialDelaySeconds: 30
            periodSeconds: 5
          livenessProbe:
            httpGet:
              path: /health
              port: 80
            initialDelaySeconds: 30
            periodSeconds: 10
      terminationGracePeriodSeconds: 30
      volumes:
        - name: logs
          hostPath:
            path: /mnt/server/logs/prod
            type: DirectoryOrCreate
---
apiVersion: v1
kind: Service
metadata:
  name: dat
  namespace: yournamespace
  labels:
    app: dat
spec:
  selector:
    app: dat
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer
---
apiVersion: batch/v1
kind: CronJob
metadata:
  name: dat-cronjob
  namespace: yournamespace
spec:
  schedule: "*/10 * * * *"
  concurrencyPolicy: Forbid
  successfulJobsHistoryLimit: 1
  failedJobsHistoryLimit: 1
  jobTemplate:
    spec:
      backoffLimit: 0
      template:
        spec:
          containers:
            - name: curl-worker
              image: curlimages/curl:latest
              imagePullPolicy: IfNotPresent
              args:
                - /bin/sh
                - -c
                - "curl -X POST http://dat/cert"
          restartPolicy: Never
kubectl apply -f dat.yml
curl http://dat.yournamespace.svc.cluster.local/version

Параметры (переменные окружения)

  • HOSTNAME

    • используется только для имени файла журнала logs/dat-<HOSTNAME>.<yyyy-MM-dd>.log
    • По умолчанию: localhost
  • PORT

    • порт сервиса
    • По умолчанию:
      • RELEASE BUILD 80
      • DEBUG BUILD 8088
  • DB_URI

    • URI базы данных
    • Поддерживается:
      • mysql mysql://user:password@host:port/database
        • MariaDB поддерживается через протокол MySQL.
      • postgres postgres://user:password@host:port/database
      • sqlite sqlite://path/to/database.db
    • По умолчанию: sqlite:./data/data.db
  • DEBUG (1, 0)

    • режим отладки
    • По умолчанию:
      • RELEASE BUILD 0
      • DEBUG BUILD 1
  • LOG_CONSOLE (1, 0)

    • вывод в консоль
    • По умолчанию: 0 (без вывода)
  • LOG_FILE (TEXT, JSON)

    • logs/dat-<HOSTNAME>.<yyyy-MM-dd>.log
    • Значение:
      • TEXT: использовать текстовый файл журнала
      • JSON: использовать JSON-файл журнала (для ELK)
    • По умолчанию: <Empty> (без файла журнала)
  • SINGLE_SERVER

    signature_algorithm, crypto_algorithm, cron, certificate_propagation_delay_seconds, dat_issuance_duration_seconds, dat_ttl_seconds
    напр. HMAC-SHA512-MFS, IV-AES256-GCM
    напр. HMAC-SHA512-MFS, IV-AES256-GCM, 0 0/30 * * * *, 1200, 10800, 600

    Пример Kubernetes с несколькими подами

    • CRON
      • Расписание: 0 0/10 * * * *
      • установить значения по умолчанию: CERT_GAP, ISSUE_DUR, DAT_TTL
    • По умолчанию:
      • RELEASE BUILD <Empty> (Отключено)
      • DEBUG BUILD "HMAC-SHA512-MFS,IV-AES256-GCM,0 0/30 * * * *,1200,10800,600"

См.

-- SINGLE_SERVER="CRON:0 0/10 * * * *,POST:/cert/HMAC-SHA512-MFS/IV-AES256-GCM/3600/222/111"