A certificate authority (CA) signs certificates that hosts trust. Your Burrow runs its own CAs for SSH user certificates: a machine fetches a certificate from an SSH user dynamic secret, the secret's CA signs it, and every host the CA is attached to accepts it for SSH logins until it expires.
A CA's signing keys are made in your Burrow and stay there, sealed under its master key like your secrets' values. Hosts trust a CA through their node: your Burrow sends each node the keys of the CAs attached to it and the certificates they revoked, and the node sets up its host's sshd with them.
Create a certificate authority#
Open Certificate authorities and select the
+at the top right of the table.Name the CA. A name is lowercase letters, digits and hyphens, starting with a letter, up to 64 characters, and spaces turn into hyphens as you type.
Pick the nodes whose hosts are to trust it. A CA needs at least one.
Set its key rotation, described below, and select Create.
The dialog turns into the new CA's details, its trust anchor among them. Its first signing key is an Ed25519 key.
Without read and write on Nodes, the dialog says so in place of the form. With no nodes yet, it offers Add node, which opens the Nodes page's own dialog, or Go to Nodes when a node token is out and no node has registered with it yet.
Key rotation#
A CA's signing key is replaced by a handover: the new key is trusted on your hosts before it signs anything, and the key it replaces stays trusted until everything it signed has expired, so a rotation leaves every certificate working.
Setting | What it does |
|---|---|
Rotate every | Off, a new key is prepared when you rotate by hand. On, one is prepared every 1 to 3650 days, counted from when the signing key started signing. |
Switch after | On, a new key starts signing 1 to 720 hours after it's prepared. Off, it waits until you switch to it. |
A new CA rotates by hand and switches to a new key 48 hours after it's prepared. Change either later with Rotation settings from the CA's row menu. A key already waiting follows the new switch setting, counted from when it was prepared.
Rotate, switch and replace keys#
The CA's row menu carries what fits where its rotation stands:
Action | What it does |
|---|---|
Rotate now | Prepares a new key now. Your hosts trust it from then, and it starts signing after the switch delay, or when you switch to it. |
Switch to new key | Makes the waiting key the signing key now. The previous key stays trusted until everything it signed has expired. |
Remove new key | Drops a waiting key that never signed. The current key keeps signing. |
Replace key now | For a key you believe is compromised. A new key signs from then on, and the current key leaves the trust anchor at once, so every certificate it signed stops working once your hosts have the new trust anchor. A key waiting to be switched to is dropped too. |
Details#
The table shows each CA's signing key fingerprint, where its rotation stands, and when it was made, with a tag beside its name counting the secrets that issue from it. Details in its row menu shows the rest, and follows changes as they happen:
Its status, what it signs, its key algorithm, and where your Burrow's master key is kept.
Its rotation: how often, what comes next, and when a new key switches.
Every signing key, newest first, with its fingerprint and state: Signing, New, Retiring, Replaced or Removed.
Its nodes, and where each host stands with it: On its host, Waiting while the node is offline or the change is on its way, or Failed, with the node's reason.
Its trust anchor: the lines a host's
TrustedUserCAKeysfile holds to trust it, with a copy button.The secrets that issue from it, by project, environment and name, or how many to a member who can't read secrets.
Nodes#
A CA is trusted on the hosts of the nodes it's attached to. Change them in its details: pick or clear nodes, then select Save. Attaching a node puts the CA on its host, and detaching takes it off. Removing a node detaches it from its CAs.
A member without read and write on Nodes sees a CA's nodes greyed, and a member who can't read nodes sees how many there are.
On the host#
Each node is sent the keys and revocations of its CAs when it connects and whenever one of them changes, and every ten minutes it checks its host again and puts back anything that went missing. On the host it works with what's there:
When sshd already trusts a CA file, the node keeps its keys in a marked section of that file. The keys already in it, and any added later, stay as they are.
When sshd trusts none, the node keeps its own file in
/etc/ssh/ratel-nodeand points sshd at it from a marked section at the top ofsshd_config. The change is checked withsshd -tfirst and sshd is reloaded after; if sshd won't reload,sshd_configis put back as it was.Revocations go into the host's own revocation list when it has one, added with
ssh-keygento a binary list or as a marked section of keys in a plain-text one. Without one, the node keeps its own.
Every file is written whole and renamed into place. After the first time, a new CA, a rotation or a revocation only rewrites files, which sshd reads at its next login. SSH sessions still open with a revoked certificate are ended, as described in Dynamic secrets.
SSH trust is set up on Linux hosts with OpenSSH, by ratel-node 0.2.0 and later. Ending revoked sessions takes ratel-node 0.2.1.
Disable, delete and restore#
Action | What happens |
|---|---|
Disable | The CA stops issuing until it's enabled again. Its hosts keep trusting it, so the certificates it already signed keep working until they expire. |
Delete | The CA stops issuing and is taken off its hosts. It stays restorable for 7 to 30 days, 30 unless you choose, in a Deleted section below the table, and is then removed for good with its keys. Deleting one that secrets issue from says so first. |
Restore | From its row in the Deleted section. It comes back disabled and is put back on its hosts; enable it to issue again. Restoring is refused while another CA has its name. |
Audit log#
Every change to a CA is recorded in your audit log, and each event can be sent to a webhook.
Event | Code | Severity |
|---|---|---|
Certificate authorities listed |
| Info |
A CA's details opened |
| Info |
CA created |
| Notice |
CA renamed |
| Notice |
CA disabled |
| Warning |
CA enabled |
| Notice |
Rotation settings changed |
| Notice |
New key prepared, by a member or on the CA's rotation schedule |
| Notice |
Switched to the new key, by a member or after the switch delay |
| Notice |
Waiting key removed |
| Notice |
Signing key replaced at once |
| Warning |
An old key left the trust anchor, once everything it signed had expired |
| Notice |
CA deleted |
| Warning |
CA restored |
| Notice |
Deleted CA removed for good with its keys |
| Notice |
Nodes attached or detached, when the CA is created and on every change after |
| Warning |