Transport bundle signing: key/trust/rotation decisions; pull + differential bundles (#45 follow-up) #110
Reference in New Issue
Block a user
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?
Follow-up from ScadaBridge#45. Bundle signing landed on main (detached ECDSA P-256
manifest.sigovermanifest.json, off by default,RequireSignedBundlesopt-in, format version unchanged; pre-signing bundles checked in as fixtures and proven to still import). Cluster-to-cluster pull and differential bundles are written up without code indocs/plans/2026-11-09-transport-pull-and-differential-addendum.md.Decisions needed:
ScadaBridge:Transport:Signing:TrustedKeys, or a config-DB trust list editable in the Admin UI with expiry/revocation?RequireSignedBundlesto on at the production boundary once every exporting cluster signs?${secret:}config expansion?Owner decision 2026-11-09: one signing key per environment, held in the Secrets store and read via ${secret:}; keep the hand-edited
ScadaBridge:Transport:Signing:TrustedKeys(no Admin UI trust list yet); defaultRequireSignedBundleson at the production boundary once every exporting cluster signs; no cluster-to-cluster pull (CLI export→import covers it); differential deletions stay deferred.Implemented in
559e02f5(main).Signing:ProductionBoundaryflag (default off). While true and RequireSignedBundles is false: startup WARNING + Degradedbundle-signing-policy/health/ready entry (HTTP 200). Code default of RequireSignedBundles unchanged.${secret:}PrivateKey verified end to end (TransportSigningSecretExpansionTests: expand -> bind -> validate -> sign -> Verified); validation messages and the signature entry never contain key material (tests).Evidence: build 0 warnings; Transport.Tests 228+, Transport.IntegrationTests 151, Host.Tests 668 pass (plus 3 new health-check tests); mutation-proved (advisory condition, warning log, key source, health status each fail their tests when broken).