BAD SKY.NET

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

A legacy TLS cipher suite with ECDHE key exchange and AES-256 in CBC mode with SHA-1, offered by browsers as a fallback.

TLS cipher suiteCode 0xc014 (49172)legacy

What it is

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (code 0xC014) is the 256-bit sibling of TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, also described in RFC 8422. Key exchange is ephemeral elliptic curve Diffie-Hellman with an RSA certificate, and records are protected with AES-256 in CBC mode plus HMAC-SHA1.

The forward secrecy is good, but the record layer is dated. CBC with MAC-then-encrypt has a history of padding oracle attacks, and SHA-1 is no longer considered a strong hash. RFC 9325 recommends against such suites unless encrypt_then_mac is in use.

It remains in client lists only to reach old servers that do not support GCM or ChaCha20 suites. A modern server should not need it.

In CBC suites the hash at the end of the name is the record MAC, so the _SHA ending means HMAC-SHA1. In GCM suites the hash only names the PRF, because GCM authenticates the records itself. A _CBC_SHA name is a quick way to spot the oldest suites in a list.

Who sends it

Chrome 153 (macOS) browser Sent at position 11
curl_cffi (impersonate chrome) Sent at position 11
curl-impersonate chrome116 Sent at position 11
curl-impersonate ff117 Sent at position 13
curl 8.7 (macOS) Sent at position 11
curl 7.88 (Debian 12) Sent at position 20
Python requests Not sent
Python httpx Not sent
Python httpx (HTTP/2) Not sent
Go net/http Sent at position 10
Node.js fetch Sent at position 24
PHP Guzzle Sent at position 20

Measured on 2026-10-25 against our own test server: sent by 9 of 12 clients. Position counts from 1 and ignores GREASE values.

Why it matters for fingerprinting

Chrome, curl_cffi and curl-impersonate chrome116 send it 11th, Go net/http 10th, macOS curl 11th, Debian curl and Guzzle 20th, and Node.js fetch 24th. Python requests and httpx do not offer it.

Check whether your client sends it

Open the test from your browser, or call it from your script, and look for TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA in the TLS details.

Run the TLS fingerprint test

References

Related