BAD SKY.NET

compress_certificate

compress_certificate lets the server send its certificate chain compressed. Chrome and recent OpenSSL clients send it.

TLS extensionCode 0x001b (27)

What it is

compress_certificate (extension 27) is defined in RFC 8879 for TLS 1.3. The client lists the compression algorithms it accepts, such as zlib, Brotli or Zstandard, and the server may then send its certificate chain compressed.

Certificate chains are often several kilobytes and make up most of a TLS 1.3 handshake. Compressing them saves bandwidth and can keep the server's first flight inside the TCP initial window, which avoids an extra round trip. The gain is larger now that post-quantum key shares make handshakes bigger.

In our measurements both Chrome and recent OpenSSL-based clients offer it.

The server is free to ignore the extension and send the chain uncompressed, so offering it never breaks a handshake. It applies only to TLS 1.3, because it relies on the TLS 1.3 handshake message layout.

Who sends it

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

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

In our measurements it is sent by Chrome, curl_cffi, curl-impersonate chrome116, Python requests, httpx and Guzzle. curl on macOS and Debian, Go net/http, Node.js fetch and the Firefox profile of curl-impersonate do not send it. Which compression algorithms are listed differs between Chrome and OpenSSL, but our test shows only the extension itself.

Check whether your client sends it

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

Run the TLS fingerprint test

References

Related