TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
A TLS 1.2 cipher suite with ECDHE, AES-128-CBC and HMAC-SHA256. OpenSSL clients offer it, browsers do not.
What it is
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (code 0xC027) is defined in RFC 5289 for TLS 1.2. It uses ephemeral elliptic curve Diffie-Hellman with an RSA certificate, AES-128 in CBC mode, and HMAC-SHA256 instead of HMAC-SHA1 for record integrity.
It was added in the same RFC as the GCM suites, as a CBC option with a stronger hash. The hash upgrade does not fix the structural issue of CBC with MAC-then-encrypt, so it shares the padding oracle history of other CBC suites. RFC 9325 says CBC suites SHOULD NOT be used unless encrypt_then_mac is negotiated.
Servers that support it almost always support the GCM suites as well, so it is rarely the suite that ends up negotiated.
Despite the SHA256 in its name, it is not a TLS 1.3 suite. The name follows the TLS 1.2 pattern of key exchange, certificate, cipher and MAC hash.
Who sends it
Measured on 2026-10-25 against our own test server: sent by 7 of 12 clients. Position counts from 1 and ignores GREASE values.
Why it matters for fingerprinting
Python requests, httpx, Node.js fetch, Guzzle and both curl builds offer it; Chrome, curl_cffi, curl-impersonate and Go net/http do not. Node.js sends it unusually early, at position 9, while Python sends it 13th, Debian curl and Guzzle 17th and macOS curl 21st.
Like the other _SHA256 and _SHA384 CBC suites, it is a typical OpenSSL default that none of the Chrome-like clients send.
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_128_CBC_SHA256 in the TLS details.
Run the TLS fingerprint test