# 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`](./CLAUDE.md). ## Quickstart Voraussetzungen: Docker (+ compose), [`just`](https://github.com/casey/just). Für lokale Entwicklung ohne Container zusätzlich Rust ≥ 1.85 und [Bun](https://bun.sh/) ≥ 1.2. ```bash just # Rezepte auflisten cp deploy/.env.example deploy/.env just up # Stack hochfahren ``` Frontend: . 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 ```bash 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. ```bash 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`.