70 lines
3.0 KiB
Markdown
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`.
|