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

70 lines
3.0 KiB
Markdown

# 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: <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
```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`.