TLS_RSA_WITH_AES_128_CBC_SHA
An old TLS cipher suite with static RSA key exchange, AES-128 in CBC mode and SHA-1, still sent by Chrome as a fallback.
What it is
TLS_RSA_WITH_AES_128_CBC_SHA (code 0x002F) dates back to RFC 3268 and is the mandatory cipher suite of TLS 1.2 in RFC 5246. It combines static RSA key exchange, AES-128 in CBC mode, and HMAC-SHA1 for message integrity.
Every part of it shows its age. Static RSA has no forward secrecy. CBC mode with MAC-then-encrypt was behind attacks such as Lucky Thirteen and POODLE-style padding oracles, and SHA-1 is no longer considered strong, although HMAC-SHA1 is not directly broken. RFC 9325 advises against static RSA, and against CBC suites unless the encrypt_then_mac extension is negotiated. TLS 1.3 dropped all of them.
It survives because it is the lowest common denominator: almost any server from the last twenty years supports it. Clients that want maximum compatibility still list it last.
Who sends it
Measured on 2026-10-25 against our own test server: sent by 8 of 12 clients. Position counts from 1 and ignores GREASE values.
Why it matters for fingerprinting
Chrome still offers this suite near the end of its list, and so do curl, curl_cffi, curl-impersonate, Node.js fetch and PHP Guzzle. Python requests, httpx and Go net/http do not send it in our measurements, because their default cipher lists drop static RSA key exchange. Its absence is one of the easiest ways to tell a Python or Go client from a browser in the JA3 cipher list.
Chrome, curl_cffi and curl-impersonate chrome116 send it at position 14 of their 15 suites, while curl and Guzzle send it around position 30 among many other legacy suites.
Check whether your client sends it
Open the test from your browser, or call it from your script, and look for TLS_RSA_WITH_AES_128_CBC_SHA in the TLS details.
Run the TLS fingerprint test