Hub — overview¶
The Hub is the brain: a single Rust binary that runs your certificate authority, ACME client, Cyphers Score engine, renewal lifecycle, and the dashboard. Scout is the eyes, deployed on each endpoint; the Hub is the one instance everything reports to.
One binary, two roles¶
There is exactly one Hub codebase. Which role it plays is a boot-time
configuration choice — CYPHERS_ROLE (satellite or master; the legacy
CYPHERS_MASTER_MODE=true/false boolean still works and maps to the same two
roles) — not a fork or a separate build. If CYPHERS_ROLE is unset or
unrecognized, the Hub defaults to satellite.
flowchart LR
subgraph satellite [Satellite Hub - your network]
S["Hub, role satellite"] --- PG1[("PostgreSQL")]
S --- Sc["Scout agents"]
end
subgraph masterinfra [Master Hub]
M["Hub, role master"] --- PG2[("PostgreSQL")]
M --- CH[("ClickHouse: CT log corpus")]
end
S -->|"mTLS CT Intel query"| M
| Role | CYPHERS_ROLE |
What it runs | Where it runs |
|---|---|---|---|
| Satellite Hub | satellite (default) |
ACME/CA lifecycle, mTLS enrollment, Scout command queue, fleet posture, dashboard. PostgreSQL only — no local ClickHouse. | Your network — one Docker Compose (or native) appliance per customer. |
| Master Hub | master |
Everything a Satellite runs, plus Certificate Transparency log ingestion into ClickHouse and DNS TXT delegation control-plane routes. | Cyphers' own infrastructure, or self-hosted on-prem by a customer that wants its own Master. |
A Satellite is the day-to-day product: local certificate lifecycle management against your own fleet. What "Satellite" adds over a bare, CT-disabled Hub is a live query path to a Master Hub's Certificate Transparency intelligence — public issuance/name evidence for domains you care about, without running a CT log scanner and a multi-hundred-GB ClickHouse corpus yourself. That query path is mTLS-authenticated; the Master never receives or controls your local CA private keys.
A Master is centralized infrastructure: it scans public CT logs continuously, stores every certificate it sees in ClickHouse, and answers authenticated CT Intel queries from Satellites. It also runs the DNS TXT delegation control-plane, so Satellites can complete ACME DNS-01 challenges without holding their own DNS provider credentials.
Mode gates live in hub/src/main.rs (route registration) and
hub/src/config/mod.rs (HubRole resolution); see
docs/agent/architecture.md for the full route/module breakdown.
Where to go next¶
- Satellite Hub — install procedure — the deliverable: prerequisites, the Master-dependency chain, step-by-step install (Docker Compose and packaged bare-tarball paths), the full satellite env var reference, first-boot CA self-provisioning, the validation preflight gate, and troubleshooting.
Scope of this page
This wiki does not yet carry a standalone Master Hub install page — the Master side of the dependency chain (reachability, the CT Intel mTLS bundle) is documented from the Satellite's point of view in Satellite Hub — install procedure.
Hub PKI endpoints¶
The Hub runs a public, read-only PKI surface on its Scout REST port (default
:8443) — its own CA material, unauthenticated by design. These are Hub
endpoints; a running Scout agent is only ever a client of them (and fetches
just the CRL, as a revocation-check fallback). They also serve the installer,
ops/DR checks, and anything validating a Cyphers-issued certificate:
Hub endpoint (:8443) |
Returns | Fetched by |
|---|---|---|
GET /api/ca/chain |
the Hub CA chain (intermediate + root), PEM | the installer, to derive the pin |
GET /api/ca/crl.pem |
the Hub CA's revocation list | the Scout agent (revocation fallback) |
GET /api/ca/root |
the Hub root CA certificate, PEM | DR/health checks; caIssuers AIA in issued certs |
POST /api/ca/ocsp |
the Hub CA's OCSP responses (RFC 6960) | nats-server, to staple into the handshake |
This table used to live only on the Scout overview page because there was no Hub section to hold it — it moved here since it documents the Hub's own CA surface, not Scout behavior.