initial tpm broker
This commit is contained in:
+20
-3
@@ -982,9 +982,26 @@ UKI + isolated VLAN + read-back verify.**
|
||||
[tpm-enrolment-design.md](tpm-enrolment-design.md)** — unifies this item with the
|
||||
fleet-manager (the broker = the fleet-manager's one unauthenticated bootstrap
|
||||
endpoint; approval births the inventory record) and the full identity lifecycle
|
||||
(enrol / renew / alert). **v1 decision: fingerprint-only OOB assurance**; TPM
|
||||
attestation (ACME `device-attest-01`) is the documented later upgrade. The notes
|
||||
below are retained as the originating decisions; the design note is canonical.
|
||||
(enrol / renew / alert). **v1 decisions (2026-06-28):** fingerprint-only OOB
|
||||
assurance (TPM attestation via ACME `device-attest-01` is the documented later
|
||||
upgrade); **inline single-UKI** vehicle for now (empty-NV early-boot branch — keeps
|
||||
provisioning network-boot-only, no USB; a separate provisioning UKI behind an
|
||||
`enrol_mode` build flag is the planned later upgrade); enrolment transport is plain
|
||||
**stdlib HTTP/JSON** (Go, the one unauthenticated edge — gRPC reserved for the
|
||||
steady-state agent path). The notes below are retained as the originating decisions;
|
||||
the design note is canonical.
|
||||
|
||||
**Broker BUILT (server side, 2026-06-28): [serving/enrol-broker/](../serving/enrol-broker/)**
|
||||
— Go/stdlib; public unauth `POST /request`+`GET /status/{id}` (behind the serving
|
||||
nginx `/enrol/`) + admin **mTLS web UI** (`/`, `/pending`, `/approve|deny/{id}`)
|
||||
with a **dedicated admin CA** (`admin-pki.sh`); wordlist fingerprint, time-boxed
|
||||
store, per-IP rate limit; signs via `step` (dev `mock` signer). Ships in
|
||||
`serving/dot1x-bench/docker-compose.yml`; end-to-end smoke-tested (CSR → mTLS
|
||||
approve → cert). **BENCH-VERIFY:** run against real step-ca (`bootstrap.sh` root +
|
||||
`enrol` provisioner password readable by the broker) and confirm an issued cert
|
||||
authenticates EAP-TLS. **REMAINING:** the host-side inline empty-NV dracut branch
|
||||
(generate key/CSR → POST → Plymouth fingerprint → poll → NV write → reboot) +
|
||||
`tpm2-openssl` in the image.
|
||||
|
||||
How a host gets its **802.1X EAP-TLS client identity** the first time — the key at
|
||||
TPM handle `0x81010001` + cert at NV `0x01800001` that invariant #1 says must come
|
||||
|
||||
Reference in New Issue
Block a user