Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Implements HTTPS upstream support so ER can reverse-proxy to a TLS backend (e.g. OpenBao's UI) and verify its cert against a per-service CA — bridging trust so a browser reaches the backend over ER's real (ACME) cert without installing the internal CA. Delivers capability #3 of #11.
Design/plan (Obsidian, source of truth):
Personal/Projects/edge-router/specs/2026-08-26-https-upstream-design.mdPersonal/Projects/edge-router/plans/2026-08-26-https-upstream.mdStatus: code complete on branch
feat/https-upstream(pushed); full suite 253/0, zero warnings. Awaiting merge-to-main decision.Tasks (TDD):
011(target_scheme,upstream_ca_cert)upstream.rs, onAppState)Scope: health checks in; wss-to-backend out (raw-TCP path → 501 for now); CA replaces roots (pinned), mirroring
broker.rs; no skip-verify; fail-closed → 502. Independent ofBAO_CACERT(that's ER-as-consumer trust; this is ER-as-proxy trust).Live verification (DevInfra, after merge/publish) — two deployment preconditions:
target_hostmust bebao.dev.oates.ws(devnet alias) and that name must be a SAN on OpenBao's actual cert (verify withopenssl s_client).upstream_ca_certpath (can be the same file asBAO_CACERT).Note on #11: this delivers capability #3 only. Capability #2 (ER presenting a real
*.dev.oates.wscert to the browser) is assumed satisfied by ER's ACME/[[tls]]; #11 hints devinfra may use an externally-renewed lego cert, which ER cannot import — that path is unverified. Do not close #11 on this alone.Closing — the merge decision this was waiting on was taken: merged to
mainasc99cc76on 2026-08-26. The body above still says "awaiting merge-to-main decision", which is stale.Verified on
maintoday:src/upstream.rs(cached CA-verifying client,apply_ca_pinningshared by the proxy path and the health probe) andmigrations/011_service_https_upstream.sql(target_scheme,upstream_ca_cert). All six tasks above are ticked and match the code.The remaining work is devinfra's, not EdgeRouter's — the live verification with its two preconditions (
bao.dev.oates.wspresent as a SAN on OpenBao's cert; the internal CA PEM mounted at the service'supstream_ca_certpath). Keeping an ER issue open to track a deployment step would leave it open indefinitely, so it belongs on devinfra if it needs tracking.Per the note in the body, this is capability #3 of #11 only — #11 stays open, and capability #2 (ER presenting a real
*.dev.oates.wscert) remains unverified.