v0.17.2 — a key per name
A security fix, and it is the reason to take this release.
One TLS key per name, not one per ending (#253)
keyPaths keyed certificates off the ending, justified in its own comment as "that is the granularity the registry stores". That is the opposite of what migration 009 stores, and of why it stores it:
Per name rather than per TLD, and that is forced by 008: names under a TLD are sold, so
blue.eggscan belong to someone who does not own.eggs. Hanging keys off the TLD would let its operator publish a key for a name they already sold — impersonating a buyer inside the namespace they bought into.
A shared per-ending key is that hole in private-key form:
- the ending's operator holds the private key for every name they have sold, and
- every buyer holds a key that signs for every other buyer.
009 closed this at the pin layer. Keying certificates off the TLD reintroduced it one layer down, where it is worse — a pin can be withdrawn, a distributed private key cannot. The certificate's DNS:*.<tld> SAN, which had each buyer's certificate asserting authority over its neighbours, went with it.
It also unbreaks nginx -t on any box that ran the old moshcode site: those wrote conf.d blocks pointing at /etc/ssl/moshpit/<tld>.crt while the certificates on disk are per-name, so nginx could not reload. Nothing goes down when that happens — nginx keeps its last good config — which is precisely why it can sit unnoticed until a reboot takes every site on the box with it.
Also in this release
- #254 —
fix(prd): the index link keeps working for a PRD file name that was not slugified. - #252 —
ci(vu1nz): scan workflow re-rendered atvu1nz-scan@1.0.2.
Upgrading
Boxes that already ran the old moshcode site are not cleaned up by installing this. They still have conf.d blocks referencing per-ending certificate paths, and will fail nginx -t until those are removed or regenerated. On dev.profullstack.com they were moved to /root/moshpit-confd-backup/; sites-enabled already served every name correctly.
Names already serving with per-name certificates — which is what setup-origin.sh has written all along — need nothing.
838 tests pass.
🤖 Generated with Claude Code