Managed shared Supavisor transaction pooler: upstream encryption and server verification guarantees #51895
Replies: 2 comments
|
The docs do not promise that the link between the shared pooler and your database is encrypted. They describe the shared pooler as running on a separate server from your database, with broad claims that data is encrypted in transit, but Supabase never names this specific link. The “Enforce SSL” setting only covers connections coming into Postgres, Supavisor and PgBouncer, not the pooler’s own link to the database, and turning it on reboots the database. If you need encryption and a verified server identity on every step, connect directly to the database with https://supabase.com/docs/guides/database/connecting-to-postgres/pooling-and-limits |
Hosted Supavisor Upstream Security, Transit Encryption, and Verification BreakdownHere is an architectural breakdown of the hosted Supabase shared pooler path, clarifying what the platform guarantees at each network layer, why 1. Network Topology & TLS Termination Along the Shared Pooler PathIn the hosted Supabase architecture, the shared transaction pooler and your database backend are decoupled:
2. Network-Layer Transit Protection vs. Engine-Layer SSLThe discrepancy between the platform's transit encryption claims and
3. Upstream Server Identity & Certificate Verification (
|
| Architecture Route | Engine-Layer SSL (pg_stat_ssl.ssl) |
Server Certificate Verification | Connection Protocol & Requirements |
|---|---|---|---|
Shared Pooler (port 6543) |
false |
Verifies pooler certificate only; upstream is unencrypted at Postgres layer | TCP via pooler.supabase.com. Works on IPv4/IPv6 across Free and Pro. |
| Dedicated Pooler (Enterprise) | true or Local Socket |
Localhost socket / isolated private link | Available on Enterprise / Dedicated compute tiers where Supavisor colocates with PostgreSQL. |
Direct Connection (port 5432) |
true (TLSv1.3, AES-256) |
Full end-to-end verification (sslmode=verify-full) |
Direct to db.<project-ref>.supabase.co:5432. Requires project CA certificate. Requires native IPv6 (Free) or IPv4 Add-on ($4/mo on Pro). |
Supported Remediation for Strict Compliance: Direct sslmode=verify-full
- Download the custom root CA certificate from Project Settings -> Database -> SSL Configuration.
- Connect directly to
db.<project-ref>.supabase.co:5432with:psql "sslmode=verify-full sslrootcert=/path/to/prod-ca-2021.crt host=db.<project-ref>.supabase.co port=5432 dbname=postgres user=postgres" - Network constraints:
- Free tier direct hostnames resolve exclusively to IPv6 AAAA records.
- If your application server or Lambda runs in an IPv4-only environment, allocate the paid IPv4 Add-on ($4/month) under Project Settings -> Add-ons to enable IPv4 A records.
Safe, Read-Only Verification Query
Execute this query in your client session to verify active encryption without mutating project state:
SELECT
pid,
ssl,
version,
cipher,
bits,
client_dn
FROM pg_stat_ssl
WHERE pid = pg_backend_pid();- Connected via Shared Pooler:
ssl = false. - Connected Direct with
verify-full:ssl = true,version = TLSv1.3,cipher = TLS_AES_256_GCM_SHA384.
Uh oh!
There was an error while loading. Please reload this page.
What current managed-service guarantee covers the shared Supavisor transaction pooler's connection to PostgreSQL, separately from the client's TLS connection to the pooler?
A client can verify the pooler's certificate and hostname while a PostgreSQL backend reports
pg_stat_ssl.ssl = false. That statistic describes SSL at PostgreSQL for that backend; it does not by itself prove that traffic crossed a network unencrypted, or rule out encryption in another layer. I am looking for the complete managed path and a supported way to verify it.The Supavisor tenant documentation separates
upstream_ssl,upstream_verifyandupstream_tls_cafrom incoming-clientenforce_ssl. The pooling guide also distinguishes the shared pooler on a separate server from a dedicated pooler alongside PostgreSQL. These explain capabilities and architecture, but do not identify a managed tenant's active settings.Could a maintainer point to current managed-service documentation, or clarify:
Please distinguish the currently operated Supabase service from self-hosted Supavisor defaults or capabilities. Documentation links or a scoped explanation from the managed-service team would be especially useful; no project-specific data is needed in public.
All reactions