BuiltSafely

Home/Fixes

Supabase

TLS handshake failure connecting to Supabase from an old device (CBC ciphers, Nov 10)

From Nov 10, 2026 at the earliest, Supabase drops four old TLS 1.2 CBC ciphers on project APIs. Who's affected, the errors you'll see, and how to check and update the client.

  • Docs-only
  • Reviewed Oct 2026
  • 3 official sources
Sources Last checked October 20, 2026 · Badge: docs-only (official Supabase changelog and docs; we checked the OpenSSL error wording against a local test server, not a Supabase project) · Sources: official docs (linked below) · Educational, not an audit

Date may move: Supabase says removal starts November 10, 2026 at the earliest and that "The date might move later based on customer feedback" (Supabase: TLS for project APIs). Last checked Oct 20, 2026.

Most apps aren't affected. Supabase says fewer than 0.0001% of connections to Supabase projects used these cipher suites (Supabase: TLS for project APIs). This page is for the rare case where an old device, old OS or outdated runtime stops reaching your project.

The fix

Update the client, not your Supabase project. Update the affected client's operating system, runtime or TLS library to a version that supports TLS 1.3 or one of the TLS 1.2 cipher suites Supabase keeps offering (Supabase troubleshooting: TLS handshake failures after removal of CBC-mode ciphers).

The TLS 1.2 cipher suites Supabase keeps offering (Supabase: TLS for project APIs):

IANA nameOpenSSL name
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256ECDHE-ECDSA-AES128-GCM-SHA256
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256ECDHE-ECDSA-CHACHA20-POLY1305
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256ECDHE-RSA-AES128-GCM-SHA256
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256ECDHE-RSA-CHACHA20-POLY1305
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384ECDHE-ECDSA-AES256-GCM-SHA384
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384ECDHE-RSA-AES256-GCM-SHA384

All standard TLS 1.3 cipher suites stay supported (Supabase: TLS for project APIs).

If you can't update a client, Supabase suggests routing its traffic through a proxy you control. The proxy accepts the old client's ciphers and forwards requests to Supabase over a supported TLS connection. If you can't do either, open a Supabase support ticket (Supabase troubleshooting).

What changes

Starting November 10, 2026 at the earliest, Supabase stops offering four CBC-mode TLS 1.2 cipher suites on project HTTP APIs, meaning <project_ref>.supabase.co and custom domains (Supabase changelog, Oct 12, 2026). Supabase notes "The date might move later based on customer feedback" (Supabase: TLS for project APIs).

The suites being removed (Supabase changelog):

IANA nameOpenSSL name
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256ECDHE-ECDSA-AES128-SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256ECDHE-RSA-AES128-SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384ECDHE-ECDSA-AES256-SHA384
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384ECDHE-RSA-AES256-SHA384

Supabase says these older suites "have known security weaknesses and often trigger warnings in security scans" (Supabase changelog). There's no change for TLS 1.3, and TLS 1.0 and 1.1 were already unsupported.

Affected: Auth, the Data API, Storage, Realtime and Edge Functions, because they're all served from the project API domain (Supabase changelog).

Not affected: direct Postgres connections, connections through the pooler, and the Management API at api.supabase.com (Supabase: TLS for project APIs).

Supabase emailed owners of projects that had received connections using these ciphers on October 14, 2026 (Supabase changelog). If you got that email, start with the clients it mentions.

What the error looks like

The client fails during the TLS handshake, before it sends any HTTP request, so the failed request doesn't appear in your project's API logs. Up-to-date devices keep working (Supabase troubleshooting).

Error messages by client, from Supabase's troubleshooting page (Supabase troubleshooting):

ClientError message
OpenSSL-based clients, such as curl, Node.js or PHPsslv3 alert handshake failure
BrowsersERR_SSL_VERSION_OR_CIPHER_MISMATCH
Windows PowerShell and .NET FrameworkThe request was aborted: Could not create SSL/TLS secure channel.
Javajavax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
Apple platformsAn SSL error has occurred and a secure connection to the server cannot be made.

On a current OpenSSL 3.x build, the same kind of failure reads ssl/tls alert handshake failure (SSL alert number 40) rather than sslv3 .... We saw that wording when we pointed a CBC-only curl and Node.js client at a local test server that offered only GCM suites. Affected clients usually run older libraries, so expect either form.

If you see these errors before November 10, the cipher removal isn't the cause. Something else is, for example a client that only speaks TLS 1.0 or 1.1, which Supabase project APIs don't accept (Supabase troubleshooting).

Who's affected

A client is affected only if it can't use TLS 1.3 and the only TLS 1.2 suites it shares with Supabase are the CBC ones (Supabase: TLS for project APIs). Supabase's examples:

  • Unsupported operating system versions
  • Embedded devices, such as smart TVs or set-top boxes, that no longer get updates
  • HTTP clients or runtimes built against outdated TLS libraries

Remember older versions of your own mobile or desktop app that people haven't updated, on phones or computers that no longer get OS updates (Supabase: TLS for project APIs).

How to check

Supabase's checklist (Supabase: TLS for project APIs):

  1. List every client that calls your project's APIs, on <project_ref>.supabase.co and any custom domain. Include Realtime connections, servers, embedded devices and third-party integrations.
  2. Include every client version still in use, not just the latest release.
  3. For each client, check its operating system, runtime and TLS library versions, plus any TLS version or cipher settings in your code or config. A client that connects with TLS 1.3 isn't affected.
  4. Update the affected ones.
  5. Then test the app itself.

A request that works today proves nothing. Until the removal date Supabase still offers the CBC suites, so an affected client keeps connecting until then (Supabase: TLS for project APIs).

If the client machine has curl, you can check now whether it connects without the CBC suites by limiting it to TLS 1.2 and the suites Supabase keeps. Any HTTP status code, even 401, means the TLS handshake worked. A handshake error means that client relies on the suites being removed (or on something else that's unsupported).

curl -sS -o /dev/null -w '%{http_code}\n' --tlsv1.2 --tls-max 1.2 \
  --ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384' \
  https://<project_ref>.supabase.co/rest/v1/

This curl check is our suggestion, not a Supabase-documented command. We tested it against a local test server only. It tells you about that machine's curl and TLS library, which may not be the same library your app uses, so check the app's own runtime too.

What not to do

  • Don't put an HTTP (non-TLS) endpoint or a "turn off certificate checks" setting in front of your project to make an old client work. Use a proxy you control that still speaks TLS to Supabase, as Supabase suggests.
  • Don't treat this as a security problem in your app. It's a compatibility change on old clients.
  • Don't move your app to direct Postgres connections from end-user devices to get around it. Database credentials don't belong on user devices.

AI prompt

Supabase is removing four TLS 1.2 CBC cipher suites from project APIs
(<ref>.supabase.co and custom domains) from Nov 10, 2026 at the earliest.
List every client in this project that calls the Supabase API (web, mobile,
desktop, servers, devices, integrations) with its OS, runtime and TLS library
versions, and any TLS version or cipher settings in code or config.
Flag any client that can't do TLS 1.3 and might only support the CBC suites.
Don't disable certificate validation or switch any client to plain HTTP.
Show me the list and proposed changes and wait for my OK.

How to verify

  1. Update the client's OS, runtime or TLS library.
  2. Run the curl check above from that machine, or confirm the client negotiates TLS 1.3 or a GCM / ChaCha20 suite.
  3. Use the app on that device: sign in, load data, upload a file, and open anything that uses Realtime.

Supabase RLS guide · Invalid API key · CORS errors on Supabase Edge Functions

Your turn

Did an old device or app version stop connecting to your project? Tell us what it was (OS and app version), and we'll add it to this page.

This guide is educational and based on the vendor's public docs as of the review date. Platforms change: check the linked sources. Not a security audit. Disclaimer.

The BuiltSafely weekly

One email a week. What changed, and the one fix that matters.

Platform changes that affect the security of AI-built apps, checked against official docs. Free. Unsubscribe any time.