Skip to content

feat(ae-control): TLS on the control surface (CONTROL_TLS)#71

Merged
entlein merged 1 commit into
ae-followup-authfrom
feat/ae-control-tls
Jun 23, 2026
Merged

feat(ae-control): TLS on the control surface (CONTROL_TLS)#71
entlein merged 1 commit into
ae-followup-authfrom
feat/ae-control-tls

Conversation

@entlein

@entlein entlein commented Jun 22, 2026

Copy link
Copy Markdown

Why

Wire audit (tcpdump on dx→AE :9100) caught 720 cleartext Authorization: Bearer eyJ… JWTs in 70s — the #68 control-surface auth token crosses the CNI in plaintext (AE_CONTROL_ADDR is a ClusterIP svc over http). Sniffable + replayable. Auth without TLS is half a control.

What

CONTROL_TLS=true → the control surface serves TLS (httpSrv.ListenAndServeTLS) with server.crt/server.key from the service-tls-certs secret the broker/PEM already use (verified present in pl). dx skip-verifies (entlein/dx#88). Default-OFF, symmetric to CONTROL_REQUIRE_AUTH — safe incremental rollout.

  • adaptive_export_deployment.yaml: mounts service-tls-certs at /certs.
  • ALPN: ListenAndServeTLS offers h2+http/1.1; dx's net/http client speaks http/1.1 over TLS — negotiates cleanly.

Stacking

Based on ae-followup-auth (#68). Rollout: CONTROL_REQUIRE_AUTH=true + CONTROL_TLS=true together, dx AE_CONTROL_ADDRhttps://.

Validation

Being tested now on a live PG (one image change at a time, NFRs + tcpdump confirming the :9100 exchange — incl. the auth bearer — is encrypted end-to-end). Evidence to follow.

Auth without TLS is half a control: tcpdump on dx→AE :9100 captured 720
cleartext `Authorization: Bearer` JWTs in 70s — the #68 token crosses the
CNI in plaintext. CONTROL_TLS=true now serves TLS with server.crt/key from
the service-tls-certs secret (broker/PEM already use it; dx skip-verifies).
Default-OFF for incremental rollout, symmetric to CONTROL_REQUIRE_AUTH.
Stacks on #68 (ae-followup-auth). dx client half: entlein/dx#88.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 22, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 611a824d-a229-4867-8ede-965457f917c4

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/ae-control-tls

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@entlein

entlein commented Jun 23, 2026

Copy link
Copy Markdown
Author

Validated on PG 6a3998d9 (aeprod21, tcpdump + NFR). With CONTROL_TLS=true+CONTROL_REQUIRE_AUTH=true (cert from service-tls-certs at /certs, PL_JWT_SIGNING_KEY from pl-cluster-secrets) + dx AE_CONTROL_ADDR=https: AE logs TLS ENABLED+auth ENABLED; tcpdump :9100 → 0 cleartext bearer (was 1224), 482 TLS handshakes, 4283 pkts ciphertext; dx→AE→CH writes land over TLS+auth (185→193), recall 1.00/prec 1.00, 0 errors. ALPN negotiates http/1.1 with dx's net/http client cleanly.

@entlein entlein merged commit decf2ae into ae-followup-auth Jun 23, 2026
10 of 11 checks passed
@entlein entlein deleted the feat/ae-control-tls branch June 23, 2026 16:28
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.

1 participant