DAT
문서

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
DAT TTL (유효시간)help
DAT 인증서 생성 스케줄 (Cron)help
lock

접근제어

Master 토큰
DAT 인증서 생성, 서버 버전 조회
Full Cert 토큰
Full (Pair Key, Hash Key) 인증서 조회
Verify Cert 토큰
Verify (Verify Key Only) 인증서 조회

Docker로 실행

컨테이너는 일반 사용자 권한으로 실행하고, SQLite를 사용한다면 쓰기 가능한 데이터 디렉터리를 연결합니다. 토큰과 데이터베이스 암호는 명령 기록이 아니라 secret 주입 기능으로 전달합니다.

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는 인증서 조회 결과를 스냅샷으로 캐시하며, 저장소 갱신이 일시적으로 실패하면 마지막으로 성공한 스냅샷을 계속 제공합니다.

DB_CACHE_SECS는 스냅샷 갱신 간격을, DB_QUERY_TIMEOUT_SECS는 갱신 쿼리 제한 시간을 정합니다. 아직 성공한 스냅샷이 없고 저장소를 읽을 수 없다면 서비스는 DAT_STORE_UNAVAILABLE을 반환합니다.

접근 역할

환경 변수권한사용 대상
TOKEN_MASTER인증서 등록과 보호된 버전 조회운영 작업
TOKEN_CERT_FULL전체 인증서 조회DAT 발급 서비스
TOKEN_CERT_VERIFY검증 전용 인증서 조회검증·복호화 서비스

각 변수에는 쉼표로 구분한 영문자·숫자 토큰을 넣을 수 있습니다. 역할의 토큰 목록을 비우면 그 역할의 엔드포인트가 열리고 경고가 기록됩니다.

인증서 생성

master 역할은 서명 알고리즘, 암호 알고리즘, 전파 대기 시간, 발급 기간과 TTL을 지정해 인증서를 등록합니다. 전파 대기 시간 동안 서비스가 새 인증서를 먼저 동기화하고, 그 뒤 새 인증서가 발급 가능해집니다.

클라이언트 연결

  1. 발급 서비스에는 full 토큰과 전체 인증서 엔드포인트를 사용합니다.
  2. 검증 서비스에는 verify 토큰과 verify-only 옵션을 사용합니다.
  3. 첫 동기화 결과를 확인하고, 시작 실패가 필요하면 즉시 동기화 API를 호출합니다.
  4. 자동 동기화를 사용하면 애플리케이션 종료 시 매니저를 닫습니다.

언어별 builder와 종료 방식은 라이브러리 문서에서 확인합니다.

운영 확인

  • /health/version/api는 인증 없이 상태를 확인합니다.
  • /version은 master 역할이 설정되어 있으면 해당 토큰이 필요합니다.
  • 로그는 표준 출력과 표준 오류로 수집합니다.
  • 종료 신호를 전달하고 데이터베이스와 스케줄러가 닫힐 시간을 둡니다.

Kubernetes

컨테이너 포트와 probe를 서비스 포트에 맞추고, 데이터 디렉터리를 일반 사용자에게 쓰기 가능하게 연결합니다. 토큰과 데이터베이스 접속 정보는 Secret으로 주입합니다.

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 } }