feat(proof-vm-agent): boot-check TLS SANs for the dedicated droplet, cert helper (Architecte follow-up 2/4) - #252
Conversation
The agent certificate must carry a SAN for every host the control plane's PROOF_VM_ORCHESTRATOR_URL may name (the dedicated droplet's VPC IP, its hostname) - staging shipped a certificate for the docker gateway only and the CP's rustls client refused everything else. New PROOF_VM_AGENT_TLS_SANS (default: a specific bind address; required with a wildcard bind) is checked against the certificate at boot with webpki (the CP's own validator); a missing SAN exits 1 naming the host, what the cert presents, and the fix. deploy/scripts/proof-vm-agent-tls.sh mints CA + leaf from the same names (--san, env, bind host, hostname -f, VPC IPv4 on eth1) and can write the env line; the wire check translates curl SAN / chain refusals into that command. Placement wording everywhere: production is a dedicated g-8vcpu-32gb droplet on the VPC (nested KVM, no DO bare metal), never the CP droplet.
|
@greptileai please review TLS SAN boot-check (Architecte follow-up 2/4, replacement for closed #249 after #248 squash). |
Greptile SummaryThis change adds a fail-closed TLS SAN startup check for the Proof VM orchestrator and an operator helper that mints matching private-CA certificates. The service rejects certificates that omit a configured DNS name or IP address and accepts certificates containing the complete configured SAN set. Confidence Score: 5/5Safe to merge. No actionable issue was found. The focused certificate checks exercised rejection of a missing required SAN and acceptance of a helper-minted certificate with matching DNS and IP SANs. Files Needing Attention: None.
What T-Rex did
Reviews (1): Last reviewed commit: "feat(proof-vm-agent): boot-check tls san..." | Re-trigger Greptile |
* deploy: staging pins for 4252130 images.yml built GHCR digests on main then could not push the pin commit (GH013: PRs required + Greptile). Land the same promote via PR. Co-authored-by: Mathis <echobt@users.noreply.github.com> * fix(deploy): keep full prior staging release in previous Sequential promote.sh calls were snapshotting previous per service, so rollback of 4252130 would restore a mixed pin set. Capture the 1dd07f7 release once and write it back after the promote loop. Co-authored-by: Mathis <echobt@users.noreply.github.com> * deploy: staging pins for f013abb Retarget #245: main moved to #246. Digests from images run 34281980177. previous stays the full 1dd07f7 staging release. Co-authored-by: Mathis <echobt@users.noreply.github.com> * deploy: staging pins for 890ce5b Retarget #245: main moved to #247. Digests from images run 34286333214. previous stays the full 1dd07f7 staging release. Co-authored-by: Mathis <echobt@users.noreply.github.com> * deploy: staging pins for c0ce094 Retarget #245: main moved through #248/#252. Digests from images run 34297422117. previous stays the full 1dd07f7 staging release. Co-authored-by: Mathis <echobt@users.noreply.github.com> * deploy: staging pins for 85ab2b7 Retarget #245: main moved to #251. Digests from images run 34299348722. previous stays the full 1dd07f7 staging release. Co-authored-by: Mathis <echobt@users.noreply.github.com> * deploy: staging pins for e30d51d Retarget #245: main moved to #250. Digests from images run 34302039784. previous stays the full 1dd07f7 staging release. Co-authored-by: Mathis <echobt@users.noreply.github.com> * deploy: staging pins for a8b9018 Retarget #245: main moved to #253. Digests from images run 34373475123. previous stays the full 1dd07f7 staging release. Co-authored-by: Mathis <echobt@users.noreply.github.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Mathis <echobt@users.noreply.github.com>
Summary
Replacement for closed #249 (auto-closed when #248's head branch was deleted on squash-merge). Rebased onto
mainafter #248 (f6e5012).Architecte / Owner follow-up 2 of 4 (TLS SAN — hostname / VPC IP of the dedicated droplet).
Problem. The CP's rustls client (
proof-vm-fc) refuses a certificate without a SAN for the host inPROOF_VM_ORCHESTRATOR_URL. Staging minted a certificate for the docker gateway (172.18.0.1). That is worthless on the dedicated prod droplet.Agent (
bins/proof-vm-orchestrator)--tls-sans/PROOF_VM_AGENT_TLS_SANS: every host the CP's URL may name. Required with a wildcard bind.EndEntityCert::verify_is_valid_for_subject_name): miss exits 1 with the fix command.Helper (
deploy/scripts/proof-vm-agent-tls.sh) — mints CA + leaf under/etc/proof-vmwith SANs from--san, env, bind host, hostname, VPC IPv4 on eth1.Fail-closed, minimal wire impact: no protocol change, no CP change.
Greptile
@greptileai reviewTest plan
fmt · clippy · test · deny · xtaskRisk
Deploy only (host agent + operator script + docs). No miner CVM / signature / emission impact. Prod host hold.