Files
2026-05-12 19:25:14 +02:00

3.0 KiB

smgw-pki

Automatisierung der Smart-Meter-Gateway-PKI-Prozesse + Operator-Konsole. Test- und Labor-Umgebung gemäß BSI TR-03129-4, TR-03109-1 und SM-PKI Certificate Policy.

Pakete

Pfad Inhalt
backend/ Rust-Service (smgw-pki-automator) — Sub-CA-Anbindung, HSM, Scheduler
frontend/ React-Konsole (smgw-pki-console) — Operator-UI auf gleicher API
deploy/ Docker-Compose, nginx-Config, .env.example
docs/ BSI-Architektur + Compliance-Mapping + Entwicklungs-Setup

Kontextdokumente in jedem Paket: backend/CLAUDE.md, frontend/CLAUDE.md und das Top-Level CLAUDE.md.

Quickstart

Voraussetzungen: Docker (+ compose), just. Für lokale Entwicklung ohne Container zusätzlich Rust ≥ 1.85 und Bun ≥ 1.2.

just                       # Rezepte auflisten
cp deploy/.env.example deploy/.env
just up                    # Stack hochfahren

Frontend: http://localhost:8080. Backend läuft intern auf backend:8443 — siehe deploy/compose.yaml.

Login im Lab: Cert-Subject wird vom Reverse-Proxy via X-Forwarded-Cert-Subject gesetzt. Solange DEV_AUTH=1 (Standard in .env), wird zusätzlich ein Dev-Subject im Login-Formular akzeptiert.

Häufige Befehle

just up                 # build + run
just down               # stoppen
just logs backend       # logs eines Services
just rebuild backend    # ohne Cache neu bauen

just dev-backend        # cargo run (dev-auth + CORS für Vite)
just dev-frontend       # bun run dev → http://localhost:5173

just gen-api            # Rust → openapi.json → TS-Client
just openapi-diff       # Drift-Check (CI-tauglich)

just check              # cargo check + bun typecheck
just test               # cargo test

API-Vertrag

Single source of truth ist das Rust-Backend. utoipa-axum emittiert OpenAPI, openapi-typescript baut daraus den TS-Client.

just gen-api            # nach jeder API-Änderung im Backend

frontend/openapi.json ist eingecheckt für reproduzierbare Builds. just openapi-diff schlägt fehl, wenn der Snapshot von der aktuellen Rust-Quelle abweicht.

Sicherheit

  • Nicht für Produktion. SoftHSMv2 erfüllt SM-PKI CP Level 1 nur für Entwicklungszwecke.
  • mTLS-Termination erfolgt vor dem Frontend-nginx (Caddy/Traefik o. ä.). Der Proxy setzt X-Forwarded-Cert-Subject.
  • Sitzungen via HttpOnly; SameSite=Strict; Secure-Cookie. TTL 8 h.
  • Callback-Handler des Backends prüft mTLS-Cert + SOAP-Signatur (Status TODO, siehe docs/bsi-compliance.md).

Status

Skeleton. Sub-CA-Adapter, HSM-Anbindung und iconfig-Signatur sind Stubs. Frontend ist vollständig funktional gegen das aktuelle Backend; Aktionen, die noch nicht implementiert sind, geben deterministisch 501 not_implemented zurück.

Umsetzungsreihenfolge: docs/architecture.md#umsetzungsreihenfolge.