Signing Keys and Trust Roots
An APF deployment uses several keys, each with one job. Confusing them is the most common configuration mistake, so this page lists every one.
Key Inventory
The repository’s examples/dev-keys/apf-dev.seed is a committed private key. Development setups use it as both the bundle signing key and the document signing key. It has no security value. Do not install apf-dev.pub as a trust root on any host that governs real agents.
Custody
- Bundle signing keys never touch an APF host. A host that holds a bundle signing key can sign policy for every host that trusts it.
- Host secrets are root-owned and delivered as systemd credentials. The shipped units load the document signing key, the TLS keys, and optionally the HTTP token with
LoadCredential, so theapfaccount reads per-service copies under$CREDENTIALS_DIRECTORYand has no path to the originals in/etc/apf. - Generated key files are not locked down for you.
apf-policy-service keygenandapf-compile genfixture --generate-keywrite key files with the process umask. Runchmod 0600on each seed as soon as it is written. - Each key has one job. Do not reuse the bundle signing key as the document signing key, or one trust profile for both listeners.
Separation of Duties
Whoever both holds a bundle signing key and can merge policy changes is, in effect, the policy authority. Keep those roles apart where you can, and enforce review in your source control.
Rotation
If a Key Is Compromised
Next Steps
- To set up a signing authority, refer to Configure a Signing Authority.
- To configure the extension trust profiles, refer to Configure Service Authentication.