swarm-tls: narrow each gateway's services leaf to the names it fronts
Every gateway asked the store's `pki/issue/swarm-services` for the whole swarm's service set, so a private key on any gateway host could serve a valid certificate for services that host does not front and never has. `swarm.localServiceDomains` derives the per-host subset by filtering `swarm.serviceDomains` against the vhosts this host actually renders — the deploy flags those vhosts are already guarded on, read once rather than copied into a second filter. The leaf request and the coverage guard that decides whether to re-issue both read it, so they cannot disagree about which names the leaf owes. The sub-CA's name constraint and the role's `allowed_domains` stay the swarm-wide set: every host's subset is inside it, and narrowing the constraint per host would turn one signing into N.
This commit is contained in:
parent
0649673ebf
commit
ed2ec52fe5
5 changed files with 89 additions and 20 deletions
|
|
@ -92,7 +92,8 @@ own options, the way `swarm-ui.nix` and `swarm-authelia.nix` do.
|
|||
|
||||
⚠️ The certificate one is the hardest to predict and the most visible when
|
||||
missed. `serviceDomains` is _both_ the `allowed_domains` the secret
|
||||
store's `pki/roles/swarm-services` narrows to and the leaf's SAN list,
|
||||
store's `pki/roles/swarm-services` narrows to and the list each gateway's
|
||||
leaf draws its SANs from (it carries the ones that host fronts),
|
||||
and the apex is a **sibling** of `forge.<swarm>` / `chat.<swarm>` /
|
||||
`auth.<swarm>`, not a parent — no CA in the hierarchy issues for it
|
||||
implicitly. Left out, the vhost falls back to the hive leaf and the
|
||||
|
|
|
|||
Loading…
Reference in a new issue