HTTPS-Zertifikate + Custom-CA-Trust fuer Backend, Frontend und Keycloak #290
Labels
No labels
component/backend
component/docs
component/e2e
component/frontend
component/infra
component/keycloak
prio/high
prio/low
prio/medium
type/bug
type/chore
type/feature
type/refactor
type/test
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
WompSchmiede/FamilienFeierPlaner#290
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Beschreibung
HTTPS-Zertifikate fuer alle drei Dienste (Backend, Frontend, Keycloak) bereitstellen — sowohl fuer lokale Entwicklung als auch Produktion. Eigene CA als Trust-Anchor hinzufuegbar (z. B. fuer self-signed Certs in der Entwicklung). Backend hat bereits
SSL_KEY_PATH/SSL_CERT_PATH-Variablen und HTTP/2-Autodetektion (app.ts), aber dieser Code ist ungetestet, und es fehlt CA-Trust fuer ausgehendefetch()-Aufrufe (Keycloak-API, JWKS-Abruf, Health-Check).Motivation / Anwendungsfall
Aktuell laeuft alles auf HTTP — auch serviceuebergreifend. Sobald das Projekt produktiv oder hinter Cloudflare betrieben wird, wird HTTPS benoetigt:
fetch()nutzt automatisch HTTP/2, wenn der Backend-Server HTTP/2 spricht. Ohne HTTPS am Backend faellt die Verbindung auf HTTP/1.1 zurueck — schlechtere Latenz, kein Multiplexing.secure: true) und moderne Browser-Features.Vorgeschlagene Umsetzung
Phase 1: Dev-CA + Zertifikats-Generierung
scripts/generate-dev-certs.mjs— Node.js-Script (plattformunabhaengig, nutztnode-forge).localhost,*.integration.local.dev/certs/{ca.crt,backend.{key,crt},frontend.{key,crt},keycloak.{key,crt}}.dev/certs/in.gitignore(bei Bedarfca.crtausnehmen fuer CI).Phase 2: Backend — CA-Trust fuer ausgehende Verbindungen
backend/src/app.ts:SSL_CA_PATHauswerten.undici.setGlobalDispatcher()als Trust-Anchor registrieren.fetch()-Aufrufe (Keycloak-Admin-API, JWKS viajose, Health-Check) der eigenen CA.SSL_CA_PATH/ ohne Datei: keine Aenderung.backend/src/__tests__/ssl.test.ts(NEU):vi.mock('node:fs')— testet HTTPS-Aktivierung und CA-Trust ohne echte Dateien.http2undhttpssind nicht gesetzt.http2: trueundhttps.key/https.certvorhanden.SSL_CA_PATH→ prueftundici.setGlobalDispatcher-Aufruf mit korrektem CA-Buffer.Phase 3: Frontend — HTTPS+HTTP/2-Einstiegspunkt
frontend/server.ts(NEU): Custom Entrypoint fueradapter-node.SSL_KEY_PATH/SSL_CERT_PATHpruefen.http2.createSecureServer({ key, cert }, handler).http.createServer(handler)— Fallback (bisherigesbuild/index.js).frontend/Dockerfile:CMDvonnode build/index.jsaufnode server.tsaendern.frontend/src/hooks.server.ts: Cookiesecure-Flag konfigurierbar viaCOOKIE_SECURE-Env-Var.Phase 4: Keycloak — HTTPS-Production-Mode
docker-compose.yml:command: ["start"]+KC_HTTPS_CERTIFICATE_FILE,KC_HTTPS_KEY_FILE,KC_HOSTNAME_STRICT_HTTPS: "true".command: ["start-dev"](keine Aenderung, kein Breaking Change).Phase 5: Docker-Compose-Verdrahtung
./dev/certs:/certs:roan alle Dienste.backend-api:SSL_KEY_PATH=./certs/backend.key,SSL_CERT_PATH=./certs/backend.crt,SSL_CA_PATH=./certs/ca.crt.frontend:SSL_KEY_PATH=./certs/frontend.key,SSL_CERT_PATH=./certs/frontend.crt,COOKIE_SECURE=true.keycloak:KC_HTTPS_CERTIFICATE_FILE=/certs/keycloak.crt,KC_HTTPS_KEY_FILE=/certs/keycloak.key.Phase 6: Tests + Dokumentation
frontend/src/__tests__/server.test.ts(NEU): HTTPS-Erkennung + Fallback-Tests..env.example: Neue SSL-Vars dokumentieren.backend/AGENTS.md: SSL-Vars-Tabelle umSSL_CA_PATHergaenzen.frontend/AGENTS.md:COOKIE_SECUREdokumentieren.docs/design/01-systemarchitektur.md: HTTPS-Architektur auf Ist-Zustand aktualisieren.Checkliste
scripts/generate-dev-certs.mjserstelltbackend/src/app.ts:SSL_CA_PATH+undici.setGlobalDispatcherimplementiertbackend/src/__tests__/ssl.test.ts: 3 Testfaelle (ohne/mit Certs, CA-Trust)frontend/server.ts: HTTP/2-Entrypoint fuer adapter-nodefrontend/Dockerfile: CMD auf server.tsfrontend/src/hooks.server.ts:COOKIE_SECURE-Env-Varfrontend/src/__tests__/server.test.ts: HTTPS-Fallback-Testsdocker-compose.yml: Volumes + Env-Vars fuer alle Dienste.env.example: Neue SSL-Vars dokumentiertbackend/AGENTS.md,frontend/AGENTS.md,docs/design/01-systemarchitektur.mdaktualisiert