How Enterprise Proxies Intercept and Re-Sign TLS Traffic
A TLS interception proxy decrypts and re-signs HTTPS using a private CA. How it works, what it breaks, and how to decide whether you need to buy one.

A TLS interception proxy is the only kind of proxy that can read the inside of an HTTPS request, and it earns that ability the same way an attacker would: it terminates your TLS session, opens a second one to the real server, and hands your client a certificate it minted itself. Everything else about the product category, the throughput ratings, the bypass lists, the certificate deployment headaches, follows from that one design choice.
This is written for the person deciding whether to buy one: what interception does at the handshake level, the four product categories on the market, what breaks the day you switch it on, and when the honest answer is not to buy at all.
Key takeaways
- Interception is not a protocol feature. Every inspecting proxy performs a controlled man in the middle with a private CA you install on your own endpoints.
- Buy it for data loss prevention, malware scanning of downloads, or regulator-facing evidence of content controls. Skip it if your goal is geo access, IP rotation, anonymity, or data collection.
- TLS 1.3 did not stop interception. It hides the server certificate from passive observers, which makes selective bypass harder, but a trusted local root still defeats verification.
- The breakage list is short and identical everywhere: pinned mobile apps, mutual TLS, and every runtime with its own trust store (Java, Python, Node, Go, Git).
- Vendor throughput ratings are quoted twice, once with inspection off and once with it on. Only the second number is real, and it is the one buyers forget to ask for.
- A data collection proxy is the opposite product. It tunnels TLS untouched, so your client fingerprint survives the hop.
The Buying Decision, Up Front
Most people searching for a TLS interception proxy do not need one. The category solves a narrow problem: seeing plaintext content inside HTTPS, on traffic you own, from endpoints you control. If either half of that sentence is missing, no amount of tuning will make the product work for you.
| Your actual goal | Interception proxy? | What to look at instead |
|---|---|---|
| Block malware in downloads, enforce DLP on uploads | Yes | Cloud secure web gateway or a next-gen firewall with decryption |
| Prove to an auditor that content policy is enforced | Yes | Same, with logging retention as the primary requirement |
| Debug your own app's HTTPS calls | Yes, locally | mitmproxy or a local dev proxy, not an enterprise deployment |
| Filter categories of websites | Usually not | SNI and DNS filtering read the hostname without decrypting anything |
| Collect public web data at scale | No | Forward datacenter or residential proxies that tunnel TLS untouched |
| Hide your IP, test geo-specific content | No | A [forward proxy](https://www.sparkproxy.io/blog/what-is-a-forward-proxy/) with geo targeting |
| Protect staff on unmanaged personal devices | No | You cannot install a CA there, so interception fails by design |
That last row kills more deployments than any technical limitation. Interception needs your private CA in the trust store of every client, and contractor laptops, BYOD phones, IoT devices and vendor appliances are exactly the population where you cannot install anything.
What Interception Actually Does
An ordinary forward proxy handling HTTPS uses the CONNECT method. The client asks for a raw pipe to host:443, the proxy opens a TCP socket, answers 200 Connection established, then copies bytes without understanding them, as covered in the HTTP CONNECT method explained. It sees the hostname, the port, the TLS SNI field and byte counts. No paths, no headers, no cookies, no bodies.
An interception proxy refuses to build that pipe. It reads the ClientHello, notes the SNI, then answers the handshake itself instead of forwarding it. From that point there are two independent TLS sessions:
[ client ] --TLS session A--> [ proxy ] --TLS session B--> [ origin ]
proxy's cert real cert
private CA public CA
Between session A and session B the request exists in plaintext inside the proxy's memory. That window is both the entire value proposition and the entire risk profile.
Two consequences follow. First, the client's TLS fingerprint never reaches the origin, because the proxy's own TLS library generates the ClientHello the server sees, so any JA3 or JA4 value you tuned is discarded. See TLS fingerprinting for why that matters. Second, your connection's security becomes the proxy's rather than the origin's: if the proxy accepts a weak cipher or a broken chain upstream, the client cannot tell, because it sees a valid certificate signed by a CA it trusts.
That second point is not theoretical. The NDSS 2017 study The Security Impact of HTTPS Interception by Durumeric and colleagues examined interception middleboxes and client security products, and reported that the great majority degraded connection security, with several introducing severe vulnerabilities of their own. US-CERT published alert TA17-075A on the same theme in March 2017, and the NSA followed with Managing Risk from Transport Layer Security Inspection in November 2019. Start any vendor conversation with those three documents open.
Scraping at scale? Skip the blocks.
Fast, unblockable datacentre proxies with unlimited bandwidth.
The Handshake, Rewritten Step by Step
Here is the sequence for a browser fetching https://www.sparkproxy.io/ through an inspecting gateway.
- The client sends a ClientHello. The SNI extension carries
www.sparkproxy.ioin plaintext, per RFC 6066 section 3. It is the only name the proxy has before it commits. - The proxy decides policy on the SNI alone. Bypass, or intercept. There is no second chance: once it starts answering the handshake, it has to see it through.
- The proxy opens its own TLS session to the origin. It validates the real certificate against the public root store, negotiates a cipher, and learns the true subject and SAN list.
- The proxy mints a certificate on the fly. It copies the origin's common name and subject alternative names into a fresh certificate, signs it with the private CA key, and caches the result so the next connection to that host is cheap.
- The proxy completes the client handshake with that forged leaf and its intermediate chain. The client validates it, finds the private root in its trust store, and shows a padlock.
Step 4 is where implementations differ. A proxy that copies the SAN list faithfully works with multi-domain certificates. One that mints a certificate containing only the SNI name breaks any client revalidating the name against a different Host header. Ask for that behaviour in writing.
Squid calls the feature ssl_bump, with decision states peek, stare, splice and bump: splice hands back to a plain tunnel after reading the hello, bump intercepts. Learn that vocabulary even if you buy commercial, because every vendor implements the same four states under different names.
The Private CA Is the Whole Product
The certificate authority key is the most dangerous secret in the deployment. Anyone holding it can impersonate every site on the internet to every device in your fleet. Three questions decide whether a deployment is sound.
Where does the key live? A CA key in a hardware security module or a cloud KMS with non-exportable keys is a different risk class from a PEM file on a virtual appliance. Ask, then ask again about the disaster recovery copy.
How is the root distributed? Managed devices get it through group policy, Jamf or Intune. Everything else gets it by hand, which is where the plan falls apart. Servers and containers are the forgotten population: a CI runner pulling from a package registry has a trust store too.
What is the rotation plan? Roots get long lifetimes because reissuing them is painful, so the compromise window is measured in years. A deployment with no tested rotation runbook has decided never to rotate.
One detail is worth knowing before a vendor volunteers it. Browsers deliberately relax two protections for locally installed roots: Chrome enforces neither its built-in certificate pins nor Certificate Transparency for chains terminating in a manually installed root. That exemption is what makes corporate interception work in a browser at all. Applications implementing their own pinning get no such exemption.
Four Product Categories Compared
Interception is sold in four shapes. What matters to a buyer is where the plaintext appears and who is on the hook when it breaks.
| Category | Typical products | Where decryption happens | Best fit | Main trade-off |
|---|---|---|---|---|
| Cloud secure web gateway | Zscaler, Netskope, Cloudflare Gateway | The vendor's edge locations | Distributed and remote workforce | Your plaintext transits a third party, and your egress IPs become theirs |
| Next-generation firewall | Palo Alto, Fortinet, Check Point | Your network perimeter | Offices with an existing perimeter appliance | Inspected throughput is a fraction of the headline rating, so sizing is the hard part |
| Open-source proxy | Squid with `ssl_bump`, mitmproxy | A host you operate | Labs, CI pipelines, selective inspection | You own CA custody, key rotation, uptime and the 2 a.m. page |
| Endpoint agent | Local inspection inside EDR and antivirus | On the device itself, at localhost | Roaming laptops with no network chokepoint | Historically the weakest TLS implementations of the four |
Vendor names appear as examples of each category, not as recommendations, and feature sets change. Check the current documentation of any product you shortlist before committing.
For a lab or a CI pipeline, mitmproxy is genuinely the right answer and costs nothing. For a regulated enterprise with an auditor asking for retained evidence, the real differences are logging, retention and the quality of the bypass feeds. Decryption is a solved problem. Everything around it is not.
What Breaks the Day You Enable It
This list is the same at every organisation. Print it before the pilot.
| What breaks | Symptom you will see | Fix |
|---|---|---|
| Pinned mobile and desktop apps | Handshake fails with no useful message, app reports no connection | Bypass by SNI, there is no other option |
| Mutual TLS to a partner API | Server rejects the call for a missing client certificate | Bypass, because the proxy cannot present your client cert |
| Python | `certificate verify failed: unable to get local issuer certificate` | Point `REQUESTS_CA_BUNDLE` and `SSL_CERT_FILE` at a bundle containing your root |
| Node.js | `UNABLE_TO_VERIFY_LEAF_SIGNATURE` or `SELF_SIGNED_CERT_IN_CHAIN` | Set `NODE_EXTRA_CA_CERTS` |
| Java | `PKIX path building failed` | Import the root into the JVM `cacerts` store with `keytool` |
| Git | `SSL certificate problem: self signed certificate in certificate chain` | Set `http.sslCAInfo` |
| curl | `curl: (60) SSL certificate problem` | Set `CURL_CA_BUNDLE`, and never ship `-k` to production |
| Containers | Every build that fetches packages fails | Bake the root into the image, not into the running container |
| QUIC and HTTP/3 | Traffic silently escapes inspection | Block UDP 443 so clients fall back to TCP |
| Certificate revocation | OCSP and CRL checks now describe the proxy's certificate, not the origin's | Confirm the proxy validates upstream revocation itself |
The pattern is worth naming. Everything with a trust store separate from the operating system needs separate treatment, and the people who own those runtimes are rarely the people who bought the proxy. Budget that integration work: it is the real cost of the project.
TLS 1.3, ECH and QUIC Changed the Economics
TLS 1.3 (RFC 8446, August 2018) encrypts the server certificate. Under TLS 1.2 a passive observer could read that certificate and filter on the subject name. Under 1.3 it cannot. Interception still works, because a trusted local root defeats verification at any version, but the cheap alternatives got weaker. That is the real reason inspection sales grew: not that 1.3 made interception harder, but that it made not intercepting less useful.
Encrypted Client Hello, still an IETF draft and deployed by Cloudflare with support in current Firefox and Chrome builds, conceals the SNI as well. Where ECH is in play, a proxy has no hostname to make a bypass decision on before the handshake, so policy falls back to destination IP or DNS visibility. If you also run DNS over HTTPS, that fallback disappears too, a knock-on effect covered in how DNS over HTTPS affects proxy traffic.
HTTP/3 over QUIC is the third pressure. QUIC runs on UDP and encrypts its handshake earlier, and most inspection products still deal with it by blocking UDP 443 to force a TCP fallback. Ask a vendor whether they inspect QUIC or block it. Both answers are acceptable. A vague one is not.
Questions to Put to a Vendor
Bring this list to the demo. The answers separate products faster than any feature matrix.
| Question | Answer that should worry you |
|---|---|
| What is throughput with inspection enabled, at our average object size? | Only the headline non-inspected figure is offered |
| Where is the CA private key stored, and can it be exported? | "In the appliance", with no HSM or KMS option |
| How do you handle certificates carrying multiple SANs? | Silence, or "we use the SNI" |
| Do you validate the upstream certificate, and what happens when it fails? | The proxy signs anyway and passes a valid-looking cert to the client |
| Is the bypass list category-based, and how often is it updated? | A manual list maintained by the customer |
| Is plaintext ever written to disk, and where do logs live geographically? | Cannot answer without an escalation |
| What happens when the inspection engine is overloaded? | Fails open silently, or fails closed with no alert |
| How is QUIC handled? | "It just works" |
| What is the rollback procedure at 3 a.m.? | Anything involving reinstalling certificates |
The overload question deserves attention. Fail-open means an attacker defeats your inspection by generating load. Fail-closed means a capacity problem becomes a total internet outage. Neither is universally correct, but know which one you bought before finding out empirically.
The Trade-Offs Nobody Puts on the Datasheet
Throughput collapses under decryption. Datasheets quote a firewall figure and a threat-prevention-with-decryption figure. The second is far lower, and it is usually measured at a large object size that flatters the result. Real traffic is mostly small objects and handshakes, and handshakes are the expensive part.
Latency lands per new connection, not per byte. Interception costs an extra handshake. Connection reuse hides most of it, which is why a browser feels fine on an inspected network while a job opening thousands of short connections does not.
You have created a compliance object. The proxy holds decrypted health, financial and legal traffic in memory and possibly in logs. That is why regulated categories end up on the bypass list, and why privacy regimes treat the plaintext as your processing activity.
Trust becomes centralised. One key compromise equals total impersonation of everything, for everyone in the fleet. That risk shape is unlike any other network product, and it is why the NSA guidance recommends inspecting once at a single controlled point rather than chaining inspecting devices.
Interception Proxies vs Data Collection Proxies
These are opposite products that share a word, and buyers who land on an inspection vendor while shopping for scraping infrastructure lose weeks to the confusion.
| TLS interception proxy | Data collection proxy | |
|---|---|---|
| Purpose | Read your own users' HTTPS content | Route your requests through a different IP |
| TLS handling | Terminated and re-signed | Tunnelled untouched via CONNECT |
| Certificate the client validates | Minted by your private CA | The origin's real certificate |
| Your JA3 or JA4 fingerprint | Replaced by the proxy's | Preserved end to end |
| CA installed on clients | Required on every one | Not needed |
| Traffic direction | Outbound from managed endpoints | Outbound to public websites |
| Typical billing | Per seat or per appliance | Per gigabyte, per IP, or per thread |
SparkProxy sits firmly in the second column. Traffic to gateway.sparkproxy.io on port 11000 for HTTP and HTTPS, 11002 for sticky sessions, or 13000 for SOCKS5 is tunnelled and never decrypted, so the certificate your client validates is the origin's own and your chosen TLS stack keeps its fingerprint. Published datacenter plans run from Starter at $75 a month with 100 threads and 5 whitelist slots, through Core at $140 with 250 threads and Boost at $240 with 500 threads, up to Plus at $440 with 1000 threads, all with unlimited bandwidth and 30 days validity across a pool of more than a million IPs in 80 or more countries. If you would rather not manage rotation and rendering yourself, the Scraping API opens with 1,000 free credits and no card, then $49 for 250,000 credits a month at 50 concurrent requests, where a plain fetch costs 1 credit and a JavaScript render costs 5.
If you genuinely need both, buy two products. Running an inspection gateway as your scraping egress gives you the worst of both: collection traffic gets its fingerprint rewritten, and inspection logs fill with machine traffic that buries the human activity you deployed the thing to watch. Hardening notes for running your own forward proxy are in securing proxy servers against SSRF and proxy abuse.
How to Tell If You Are Being Intercepted
One command answers the question. Look at who signed the certificate you actually received:
openssl s_client -connect www.sparkproxy.io:443 -servername www.sparkproxy.io </dev/null 2>/dev/null \
| openssl x509 -noout -issuer -subject -dates
If the issuer is a public CA, the connection is untouched. If it is your employer, your antivirus, or a product name you recognise, you are being intercepted. In a browser, click the padlock and read the chain: the root will be a name belonging to no public CA.
For scrapers the tell is easier to miss. Requests succeed, but block rates on protected targets rise for no visible reason, because the ClientHello reaching the origin belongs to the middlebox rather than to your client. If a job that ran clean on one network starts getting challenged on another, check the issuer before rewriting your rotation logic. That gap between tunnelling and terminating is also the core of how proxies and VPNs handle encryption differently.
Frequently asked questions
FAQ
Mechanically it is identical: a third party terminates your TLS session and presents a certificate it signed itself. The difference is consent and control, since the organisation owns both the endpoints and the CA. That is also why the same tooling is dangerous the moment the CA key leaks.
Yes. Interception only works on clients that trust your private root, so every laptop, phone, server, container image and CI runner needs it. Devices you cannot manage, such as contractor or personal hardware, cannot be inspected and have to be routed around the proxy.
No. TLS 1.3 encrypts the server certificate and hides it from passive observers, but an interception proxy is an active participant holding a trusted local root, so verification still passes. What TLS 1.3 broke is cheap certificate-based filtering, which is one reason more organisations now decrypt instead of inspecting metadata.
Because they use their own trust stores rather than the operating system's. Python, Node.js, Java, Go and Git each validate certificates independently, so each needs the private root added through its own mechanism, such as REQUESTS_CA_BUNDLE, NODE_EXTRA_CA_CERTS or keytool.
Not without a certificate you installed yourself. A standard forward proxy handles HTTPS with the CONNECT method and relays encrypted bytes, so it sees the hostname, port, SNI and byte counts but no paths, headers or bodies. If your client ever validates a certificate signed by an unexpected root, that is the signal something is intercepting.
Every real deployment ends up with a bypass list. Banking, healthcare, government portals, software update services and pinned applications either break or create compliance exposure when decrypted, so build the list during the pilot rather than assembling it under pressure after go-live.
Get 20% off your first month
Premium datacentre proxies with unlimited bandwidth. Use the code at checkout.
Save up to 15% more on quarterly, half-yearly and yearly plans
Related articles

How Much Do Proxies Cost? Real Prices by Proxy Type
Real proxy cost by type: per-GB residential, per-IP datacenter and ISP, mobile monthly rates, plus the cost-per-1,000-pages math that decides your bill.

How Long Do Proxy IPs Last? Replacement Policies Compared
How long proxy IPs really last by type, and what a proxy IP replacement policy must cover before you buy: swap caps, turnaround, refunds and fine print.

Are Proxies Legal? What Buyers Need to Know
Are proxies legal? Yes in most countries. The risk sits in what you route through them: case law, country rules, and the questions to ask before you buy.
