Skip to content

feat(proof-vm-agent): boot-check TLS SANs for the dedicated droplet, cert helper (Architecte follow-up 2/4) - #252

Merged
echobt merged 1 commit into
mainfrom
cursor/proof-vm-tls-san-dedicated-droplet
Sep 9, 2026
Merged

feat(proof-vm-agent): boot-check TLS SANs for the dedicated droplet, cert helper (Architecte follow-up 2/4)#252
echobt merged 1 commit into
mainfrom
cursor/proof-vm-tls-san-dedicated-droplet

Conversation

@echobt

@echobt echobt commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Summary

Replacement for closed #249 (auto-closed when #248's head branch was deleted on squash-merge). Rebased onto main after #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 in PROOF_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)

  • New --tls-sans / PROOF_VM_AGENT_TLS_SANS: every host the CP's URL may name. Required with a wildcard bind.
  • Boot check with webpki (EndEntityCert::verify_is_valid_for_subject_name): miss exits 1 with the fix command.
  • Tests: names from the list / specific bind / wildcard refusal; rcgen certs; helper round-trip.

Helper (deploy/scripts/proof-vm-agent-tls.sh) — mints CA + leaf under /etc/proof-vm with SANs from --san, env, bind host, hostname, VPC IPv4 on eth1.

Fail-closed, minimal wire impact: no protocol change, no CP change.

Greptile

  • Greptile has reviewed this PR; findings are fixed or answered
  • If the bot was silent, I commented @greptileai review

Test plan

Risk

Deploy only (host agent + operator script + docs). No miner CVM / signature / emission impact. Prod host hold.

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.
@echobt

echobt commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

@greptileai please review TLS SAN boot-check (Architecte follow-up 2/4, replacement for closed #249 after #248 squash).

@greptile-apps

greptile-apps Bot commented Sep 9, 2026

Copy link
Copy Markdown

Greptile Summary

This 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/5

Safe 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.

T-Rex T-Rex Logs

What T-Rex did

  • Executed the TLS SAN validation script to drive the test and exercise both negative-side and positive-side checks.
  • Reviewed the TLS SAN before log to confirm the missing-required-SAN rejection assertion was recorded.
  • Reviewed the TLS SAN after log to confirm the DNS/IP SAN extension was applied, CA validation succeeded, and the changed-path helper test ran.
  • Verified that tls-san-validate.sh was the source executed for the run.

View all artifacts

T-Rex Ran code and verified through T-Rex

Reviews (1): Last reviewed commit: "feat(proof-vm-agent): boot-check tls san..." | Re-trigger Greptile

@echobt
echobt merged commit c0ce094 into main Sep 9, 2026
5 checks passed
@echobt
echobt deleted the cursor/proof-vm-tls-san-dedicated-droplet branch September 9, 2026 01:00
cursor Bot pushed a commit that referenced this pull request Sep 9, 2026
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>
cursor Bot pushed a commit that referenced this pull request Sep 9, 2026
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>
cursor Bot pushed a commit that referenced this pull request Sep 9, 2026
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>
cursor Bot pushed a commit that referenced this pull request Sep 9, 2026
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>
echobt added a commit that referenced this pull request Sep 9, 2026
* 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants