If you use HashiCorp Vault or OpenBao to manage secrets, Certplane’s broker can read sensitive values (like DNS API tokens) directly from Vault rather than from environment variables or files. This keeps credentials out of your shell environment and lets you manage rotation centrally through Vault’s API.Documentation Index
Fetch the complete documentation index at: https://certplane.kippel.org/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
Before you begin, confirm the following:- Vault is running and its API is reachable from the broker host.
- You have a Vault token with
readcapability on the secret path you plan to use. - The KV secrets engine is mounted and enabled in your Vault instance.
Write the secret to Vault
Store your Cloudflare DNS API token (or any other credential) as a KV secret. The example below uses the KV v2 engine mounted at Certplane reads the field named by
secret:secrets.vault.key from this secret. The default key name is value, matching the command above.Write the Vault token to a file
Certplane reads the Vault token from a file rather than an environment variable, so the token is never exposed through the process environment:Ensure the file is readable only by the user that runs the broker process.
Configure the broker to use the Vault provider
Update
broker.yml to set secrets.provider to vault and fill in the connection details:kv_version controls which KV Secrets Engine API Certplane uses to fetch the secret:2(default) — KV Secrets Engine v2. Secrets have full version history and are stored under thesecret/data/<path>prefix internally. Use this for new Vault deployments.1— KV Secrets Engine v1. No versioning; secrets are stored directly atsecret/<path>. Use this only if your Vault instance has not upgraded to KV v2.
kv_version to match what your Vault mount actually uses.Reference the secret in your profile config
In The value
policy.yml, set acme.credentials to the Vault path of the secret (relative to the mount). Certplane appends this to mount_path when constructing the Vault API call:The
acme_challenge field in policy.yml sets the challenge type for the profile. The Cloudflare credential is configured in the broker’s issuer.acme section — the broker uses it automatically when completing dns-01 challenges for this profile.certplane/cloudflare in the Vault path matches the secret you wrote in step 1 (secret/certplane/cloudflare minus the mount prefix secret).Using OpenBao
OpenBao is an open-source fork of Vault with a compatible API. Certplane supports it natively — use the same configuration as above but setprovider to openbao:
mount_path, kv_version, key, timeout) behave identically. The vault sub-key is reused for OpenBao configuration — there is no separate openbao block.