Grilling: Signing + key policy #39
Notifications
Due Date
No due date set.
Blocks
Depends on
#42 Task: Compose release spec + ADR amending 0004
xavierk/Fenris
#38 Grilling: Lock channel + toolchain
xavierk/Fenris
Reference: xavierk/Fenris#39
Reference in New Issue
Block a user
Parent map: Fenris deb + rpm release plan
Question
Packaging GPG key policy: key creation + storage, what gets signed (rpm payload, deb, apt repo metadata — depends on chosen channel mechanics), publication points for the key, and rotation story outline.
Resolution
All recommendations (Q1–Q9) accepted.
What gets signed:
.reposets gpgcheck=1 against the instance auto-key, whose private half is unreachable, so unsigned rpms or own-key rpms via that .repo both fail; signing is the only working dnf-native verification path.Repo file consequence (surfaces new fact): Fenris ships its own
packaging/fenris.repo+packaging/keys/fenris-packaging.asc; install docs usednf config-manager --add-repo <raw-url>with gpgkey → our published key, repo_gpgcheck=0 (metadata left to TLS). Gitea's auto-generated .repo is a trap (gpgcheck against an instance key that never signed the package) and is never mentioned in docs.Key structure: single dedicated packaging key, signing-capable, RSA 3072, UID
Fenris Packaging <packaging@bongbetic.com>, 2-year expiry, renewed by re-export. No master/subkey hierarchy — ceremony without a CI fleet (single maintainer, manual builds per #37).Private key storage: password manager only. Import → sign → delete from build-host keyring each release. Nothing permanent on any machine; exposure window minutes if build host compromised mid-release.
Public key publication: in-repo
packaging/keys/(raw URL doubles as gpgkey target), release notes each release, docs page. No keyservers — TOFU-over-TLS model, external infra adds nothing.TOFU hardening (apt side): instance Debian Registry Key fingerprint published in install docs next to the curl-one-liner, closing the instance/TLS-path compromise hole to a documented constant. RPM side already closed by own-key .repo.
Rotation (outline; details stay in map fog): new key published alongside old → rpm signed with new key, fenris.repo gpgkey lists both URLs (dnf accepts multiple) → old key dropped after one release cycle.
Key creation command specifics, .repo file authoring, rpmsign wiring into
make release= execution, out of this map's scope.