feat/tls-hardening #8
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/tls-hardening"
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?
feat: durcissement TLS — PUBLIC_URL parsé, HSTS, Sec-Fetch-Site, chart publicUrl/HTTPRoute
Indara est toujours derrière un reverse proxy qui termine le TLS ;
PUBLIC_URLest la seule source dont dispose le backend pour connaître le schéma public. Cette branche verrouille toute la chaîne.Spec :
docs/superpowers/specs/2026-07-16-tls-hardening-design.md· Plan :docs/superpowers/plans/2026-07-16-tls-hardening.mdServeur (Rust)
parse_public_url(indara-core) :PUBLIC_URLparsé au boot — https obligatoire hors loopback (localhost/127.0.0.1/::1), pas de sous-chemin/query/fragment, normalisation sans/final. Nouveau champServerConfig.https. L'état d$browser_cookiepartagé (oidc_flow+sid) —Securepiloté parconfig.https, host-only verrouillé par test (jamais d'attributDomain→ jamais envoyé aux sous-domaines frères).HttpOnly/SameSite=Lax/Path=/i$Strict-Transport-Security: max-age=63072000sur toutes les réponses quand l'origine publique est https (layer outermost : couvre SPA,openapi.json,opensearch.xml, erreurs). Jamais en dev localhost.Sec-Fetch-Siterejeté sisame-site/cross-site(un frère compromis du homelab est same-site —SameSite=Laxne le bloque pas), absence tolérée ; le checkOriginexact reste obligatoire. Appliqué à tout$Chart Helm — ⚠️ breaking
publicUrlrequis et validéhttps://au templating (défauthttp://localhost:3000supprimé).ingress.hostsupprimé : l'hôte est dérivé depublicUrl(helpersindara.publicUrl/indara.publicHost) — plus de typo possible entre redirect OIDC et Ingress.gateway.networking.k8s.io/v1) : activable seul ou avec l'Ingress (split-DNS : Gateway Cilium interne + Ingress Traefik externe, même hostname).parentRefsrequis quand activé.Breaking changes (release notes)
publicUrlest requis (plus de défaut) et doit êtrehttps://….ingress.hostn'existe plus — retirer la valeur, l'hôte vient depublicUrl.PUBLIC_URLhttp://non-loopback échoue désormais au boot du serveur.Vérification
cargo test --workspace: 98/98 verts (7 nouveaux tests : parsing, cookies, HSTS, Sec-Fetch-Site) ;cargo clippy --workspace: 0 warning ;helm lint: OK.validate_session_mutation), flow OIDC intact, aucun issue Critical/Important.🤖 Generated with Claude Code