What is TLS fingerprinting?
TLS fingerprinting is a technique used by servers to identify the client making a connection by analyzing the unique characteristics of the TLS handshake. While changing theUser-Agent header might have been enough in the past, modern servers use much more sophisticated detection methods.
Even if two requests have identical HTTP headers, they can be distinguished by their TLS handshake parameters, making traditional HTTP-only spoofing ineffective.
How TLS fingerprinting works
When a client initiates a TLS connection, it sends aClientHello message containing:
- Cipher suites - The encryption algorithms the client supports
- TLS extensions - Additional capabilities and features
- Extension order - The sequence in which extensions are sent
- Elliptic curves - Supported curves for key exchange
- Signature algorithms - Methods for certificate verification
- Compression methods - Data compression preferences
Real browsers like Chrome, Firefox, and Safari each have distinct TLS fingerprints based on their underlying TLS libraries and version-specific implementations.
Example: JA3 fingerprinting
One common TLS fingerprinting method is JA3, which creates a hash from:Why TLS fingerprinting matters
Servers use TLS fingerprinting to:- Detect bots - Identify automated clients that don’t match real browser fingerprints
- Prevent scraping - Block requests from non-browser clients
- Enforce policies - Require specific client versions or security features
- Track users - Create persistent identifiers across sessions
How this library solves the problem
The TLS Client library uses uTLS to mimic real browser TLS fingerprints. Instead of using Go’s standard TLS implementation, it allows you to:- Specify browser profiles - Mimic Chrome, Firefox, Safari, and other browsers
- Match exact versions - Use fingerprints from specific browser versions
- Include all details - Replicate cipher suites, extensions, curves, and their ordering
Example comparison
Standard Go client:Testing your fingerprint
You can verify your TLS fingerprint using these services:- tls.peet.ws - Comprehensive TLS analysis
- ja3er.com - JA3 fingerprint checker
- TLS Fingerprint - Browser fingerprint database
Beyond TLS fingerprinting
While TLS fingerprinting is powerful, modern anti-bot systems also analyze:- HTTP/2 fingerprints - SETTINGS frames, stream priorities, header ordering
- HTTP/3 fingerprints - QUIC settings, frame types, connection parameters
- Header consistency - Matching headers to known browser patterns
- Behavioral patterns - Request timing, navigation flows, JavaScript execution
Related resources
Client profiles
Learn about browser profile system
HTTP protocols
Understand HTTP/1.1, HTTP/2, HTTP/3 support