Raxx · internal docs

internal · gated

RCA — vault.raxx.app origin TLS certificate expiry (CI 526s, deploy pipeline blocked)

Incident ID: 2026-07-23-vault-origin-cert-expiry Date: 2026-07-23 Severity: SEV-2 Duration: ~5h47m total (21:23:17 UTC expiry → ~03:10:25 UTC 2026-07-24 fix verified live) Blast radius: All CI pipelines and agent/CLI sessions that read secrets from vault.raxx.app (Infisical); PR #4331 and PR #4332 blocked at the vault-read step; no customer-facing surface affected (vault is an internal-only, CF Access-gated system). Author: sre-agent

Summary

Caddy's self-managed Let's Encrypt certificate for vault.raxx.app (CN=vault.raxx.app) expired at 21:23:17 UTC. Automatic ACME renewal is architecturally impossible on this host: tls-alpn-01 is blocked because Cloudflare (orange-cloud proxy) terminates TLS at the edge before Caddy ever sees the ALPN challenge, and http-01 is blocked because Cloudflare Access intercepts unauthenticated HTTP requests to vault.raxx.app with a login redirect before they reach Caddy's challenge handler. CI pipelines began failing with CF error 526 ("Invalid SSL Certificate") at the edge. Every Cloudflare credential capable of issuing a replacement Origin CA certificate is itself stored in the vault that was down — a bootstrap circularity. The recovery path was to SSH directly to the Lightsail origin and reach the Infisical backend on localhost:8080, bypassing the broken Cloudflare edge entirely, to read the one Cloudflare credential (CLOUDFLARE_ACCESS_MGMT_TOKEN) capable of minting a short-lived SSL-and-Certificates-write token. That token was used to issue a 3-year Cloudflare Origin CA certificate, which was installed as a static cert in Caddy (ACME disabled for the site), permanently removing the ACME-behind-CF-proxy failure mode for this host.

Timeline (all times UTC)

Impact

What went well

What didn't go well

Root cause analysis

Detection

Resolution

Action items

# Action Owner Due Issue
1 Confirm tickets.raxx.app's existing Cloudflare Origin CA cert (from the June 2026 fix, notAfter 2041-06-15) and the new vault.raxx.app cert (notAfter 2029-07-23) are both enrolled in the fleet cert-expiry monitor delivered in PR #4332; add an explicit test case for each hostname if not already covered sre-agent 2026-07-30
2 Document the SSH-to-origin → local-Infisical-on-loopback break-glass path as a canonical, named recovery procedure (not an improvisation) in docs/ops/runbooks/vault-disaster-recovery.md, for use whenever every Cloudflare-capable credential is unreachable because the vault edge itself is down sre-agent 2026-07-25
3 Reconcile the two documented Cloudflare token-minting endpoints for Origin CA issuance — POST /client/v4/user/tokens (used for tickets.raxx.app, June 2026) vs. the account-scoped path used for this incident's vault.raxx.app fix — into a single authoritative procedure in docs/ops/runbooks/cloudflare-tokens.md, confirming which scopes on CLOUDFLARE_ACCESS_MGMT_TOKEN back each path operator 2026-08-06
4 Audit whether any other Caddy- or nginx-fronted origin behind this Cloudflare zone still relies on self-managed ACME while sitting behind CF Access; migrate any found to the static Origin CA cert pattern proactively rather than reactively sre-agent 2026-08-13

References