BAD SKY.NET

TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256

A TLS 1.2 cipher suite with DHE key exchange and ChaCha20-Poly1305. Only curl, Guzzle and Node.js offer it in our data.

TLS cipher suiteCode 0xccaa (52394)legacy

What it is

TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (code 0xCCAA) is a TLS 1.2 cipher suite defined in RFC 7905. It pairs ephemeral finite-field Diffie-Hellman key exchange and an RSA certificate with the ChaCha20-Poly1305 authenticated cipher, and SHA-256 for the PRF.

It completes the ChaCha20 set of RFC 7905 next to the ECDHE_ECDSA and ECDHE_RSA variants. Its record protection is modern, but it carries the cost and the parameter-choice problems of finite-field Diffie-Hellman in TLS 1.2, where the server picks the group.

Because servers almost always prefer ECDHE when the client offers it, this suite is very rarely negotiated. In our data it appears only in the defaults of curl, Guzzle and Node.js.

Its code, 0xCCAA, sits right next to the two ECDHE ChaCha20 suites, 0xCCA8 and 0xCCA9, which were assigned together in RFC 7905.

Who sends it

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

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

Why it matters for fingerprinting

In our measurements only Debian curl and Guzzle (both at position 9), macOS curl (6th) and Node.js fetch (16th) offer it. Python requests and httpx, which do offer other DHE suites, leave this one out, as do Go net/http and every Chrome-like client. That makes it one of the details separating PHP and curl clients from Python clients with otherwise similar OpenSSL lists.

Check whether your client sends it

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

Run the TLS fingerprint test

References

Related