BAD SKY.NET

rsa_pkcs1_sha256

rsa_pkcs1_sha256 is classic RSA PKCS#1 v1.5 with SHA-256, still the common signature on RSA certificates.

TLS signature algorithmCode 0x0401 (1025)recommended

What it is

rsa_pkcs1_sha256 (code 0x0401) is RSASSA-PKCS1-v1_5 with SHA-256, the classic RSA signature padding. In TLS 1.3, RFC 8446 allows it only for signatures inside certificates, not for the handshake signature itself, where RSA-PSS is required. In TLS 1.2 it is also used for handshake signatures.

Many RSA certificates issued by public certificate authorities are signed with exactly this scheme, so a client must list it to accept them. RFC 8446 makes it mandatory to support for certificates.

PKCS#1 v1.5 signatures with SHA-256 are not known to be broken, but RSA-PSS has a stronger security proof, which is why TLS 1.3 moved handshake signatures to PSS.

Clients that want to accept typical RSA certificates must therefore keep it in their list, even though TLS 1.3 handshake signatures use RSA-PSS.

Who sends it

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

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

Why it matters for fingerprinting

Every client we recorded sends it: 3rd for curl-impersonate chrome116, 6th for curl_cffi and Go net/http, 7th for the ff117 profile, 8th for macOS curl, 12th for Debian curl, and 18th for Python requests, httpx, Node.js fetch and Guzzle. Our Chrome capture did not record the signature algorithms list.

Check whether your client sends it

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

Run the TLS fingerprint test

References

Related