SSL Proxy & MITM Detection
How SSL Proxy Detection Works
A technical overview explaining how SSL proxy interception is detected and how to interpret the test results.
What Is an SSL Proxy (MITM)?
An SSL proxy — also referred to as a Man-in-the-Middle (MITM) proxy — is an intermediary device that intercepts encrypted HTTPS connections between a client and a destination server.
Rather than communicating directly with the destination, the browser connects to the proxy. The proxy decrypts the inbound HTTPS traffic, inspects or filters it according to a defined policy, re-encrypts it, and forwards the reconstructed connection to the intended server.
From the perspective of the destination server, the connection appears to originate from the proxy — not from the end-user's device. This process is formally known as SSL/TLS interception or HTTPS inspection.
ℹ Technical Note
Why SSL/TLS Interception Is Deployed
SSL interception is legitimately deployed across a wide range of enterprise and security use cases. Understanding these use cases helps distinguish authorised inspection from unauthorised interception.
- Corporate security monitoring & policy enforcement
- Antivirus / malware scanning of encrypted traffic
- Data Loss Prevention (DLP)
- Cloud Access Security Broker (CASB) controls
- Advanced Threat Protection (ATP)
- Parental and content filtering
- Regulatory compliance inspection
- Credential harvesting from intercepted sessions
- Content injection or page manipulation
- Surveillance without user knowledge or consent
- Session hijacking in compromised network environments
How the SSL Proxy Check Works
Detection is based on TLS fingerprint analysis of the ClientHello message — the first packet a browser sends when initiating a secure connection. This message is transmitted before encryption is established, making it fully observable without breaking the security of the session.
3.1 — The TLS ClientHello
When a browser initiates a TLS handshake, it sends a ClientHello message containing a structured description of its TLS capabilities. The fields within this message collectively form a TLS fingerprint that is characteristic of a specific browser and its underlying TLS implementation.
| Field | Description |
|---|---|
| Supported Protocol Versions | e.g. TLS 1.2, TLS 1.3 |
| Cipher Suites | Ordered list of supported encryption algorithms |
| TLS Extensions | Additional capabilities declared by the client |
| Supported Groups | Elliptic curves and finite-field DH groups |
| ALPN Identifiers | Application protocols (e.g. h2 for HTTP/2, http/1.1) |
| GREASE Values | Randomised placeholder values (Chromium browsers only) |
These fields together form a fingerprint that is highly consistent for a given browser version. Modern fingerprinting methods such as JA3, JA3S, and JA4 hash these fields to produce a short identifier that can be compared against known browser profiles.
3.2 — Cross-Validation Against the User-Agent
Once the server captures the raw ClientHello fingerprint, it cross-validates the observed TLS characteristics against the browser identity declared in the HTTP User-Agent string.
Modern browsers generate consistent, recognisable TLS fingerprints that match their declared identity. When a middlebox intercepts the connection and rebuilds the TLS handshake using its own TLS library — such as OpenSSL, Go's crypto/tls, or a vendor-specific stack — the resulting ClientHello structure changes. These structural differences create detectable inconsistencies between the expected browser fingerprint and the observed handshake.
3.3 — Why Certificate Spoofing Cannot Bypass This Detection
Many SSL interception systems install a trusted root certificate on the endpoint device to prevent certificate warnings. This makes certificate-based detection methods ineffective — the proxy can present a trusted certificate that the browser accepts without complaint.
However, TLS fingerprint analysis operates at the handshake layer, before certificate exchange completes. Even when a proxy presents a fully trusted certificate, it cannot perfectly replicate the client TLS fingerprint because:
- Cipher suite ordering is determined by the underlying TLS library, not configurable per-session
- Extension ordering and contents are library-specific and structurally different across implementations
- GREASE values are generated by the browser's TLS stack and are not inserted by proxy libraries
- ALPN preferences reflect the browser's actual HTTP implementation, not the proxy's
- Supported version lists differ between browser TLS stacks and proxy TLS libraries
🔒 Key Principle
Detection Signals — What Each Field Reveals
The following five signals are examined during fingerprint analysis. Each represents a structural property of the ClientHello that differs predictably between genuine browser connections and proxy-reconstructed handshakes.
What it is
Randomised 0x?A?A placeholder values inserted by Chromium browsers
RFC / Spec
RFC 8701 — Generate Random Extensions And Sustain Extensibility
Normal (Chrome / Edge)
GREASE values present in cipher list and extensions
Proxy indicator
GREASE absent while Chrome or Edge is declared in User-Agent
What it is
Presence of TLS 1.3 in the supported_versions extension
Baseline
All major browsers have supported TLS 1.3 since 2018
Normal browser
TLS 1.3 present in supported_versions
Proxy indicator
TLS 1.3 absent — legacy TLS stack constructing the handshake
What it is
Advertisement of h2 (HTTP/2) in the ALPN (Application-Layer Protocol Negotiation) extension
Normal browser
h2 and http/1.1 both advertised via ALPN
Normal browser
h2 + http/1.1 advertised via ALPN
Proxy indicator
h2 absent — only http/1.1 present in ALPN
What it is
Total number of cipher suites offered in the ClientHello
Browser baseline
Chrome / Edge / Firefox: 15–20 cipher suites
Normal browser
15–20 cipher suites offered
Proxy indicator
3–6 suites — OpenSSL / Go-based proxy library
What it is
Total number of TLS extensions present in the ClientHello
Normal browser
12 or more extensions (SNI, OCSP, SCT, session ticket, key share, etc.)
Normal browser
12+ extensions including optional ones
Proxy indicator
< 8 extensions — minimum-viable ClientHello construction
Signal Quick Reference
A summary of all five detection signals and their expected values for legitimate browsers versus proxy-intercepted connections.
| Signal | ✔ Legitimate Browser | ✕ Proxy / MITM Indicator |
|---|---|---|
| GREASE Values | Present (0x?A?A pattern) — Chrome/Edge | Absent despite Chromium User-Agent |
| TLS 1.3 Support | Present in supported_versions | Absent — legacy TLS stack in use |
| ALPN: h2 (HTTP/2) | h2 + http/1.1 advertised | http/1.1 only — h2 missing |
| Cipher Suite Count | 15–20 suites (Chrome / Firefox / Edge) | 3–6 suites (OpenSSL / Go library) |
| Extension Count | 12+ extensions including optional ones | < 8 extensions — minimal construction |
Interpreting Your Results
The detection engine cross-references all observed signals against the declared browser profile. Results fall into one of two categories:
No SSL Proxy Detected
SSL Proxy / MITM Detected
⚠ Important Context for MITM Detected Results
A MITM detection result does not necessarily indicate a malicious interception. Enterprise corporate networks, secure web gateways, and cloud security platforms routinely perform authorised SSL inspection.
If you are on a corporate network and see this result, your organisation's security gateway is likely performing HTTPS inspection as part of its standard security policy.
If you see this result on a personal or untrusted network where no interception is expected, investigate the network environment and the certificates being presented to your browser.