BAD SKY.NET

signature_algorithms

signature_algorithms lists the signature schemes a client can verify, such as ECDSA, RSA-PSS and Ed25519.

TLS extensionCode 0x000d (13)

What it is

signature_algorithms (extension 13) tells the server which signature schemes the client accepts. In TLS 1.3, defined in RFC 8446, each entry names a full scheme such as ecdsa_secp256r1_sha256 or rsa_pss_rsae_sha256. The server signs its CertificateVerify message with one of them, and its certificate chain should use them as well.

TLS 1.2 introduced the extension in RFC 5246 with separate hash and signature fields. TLS 1.3 kept the same code numbers but redefined them as complete schemes. A separate extension, signature_algorithms_cert, can list different schemes for certificates; none of our measured clients send it.

The extension is required in TLS 1.3 when the server authenticates with a certificate, so every modern client sends it.

If the server key cannot sign with any listed scheme, the handshake fails; for the certificate chain itself the server may still send a fallback chain.

Who sends it

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

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

Why it matters for fingerprinting

Every measured client sends it. The scheme list is not part of JA3, but JA4 includes it, in the order sent, in the hash of its third part, so two clients with the same ciphers and extensions can still differ in JA4. See the signature algorithms hub for the individual schemes.

Check whether your client sends it

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

Run the TLS fingerprint test

References

Related