All locations active · 99.99% uptime
Protocols

Proxy and TLS Certificate Validation

The certificate error that appears after you configure a proxy can be a sign of two completely different things: either there is an inspection layer in the middle, or there is a simple configuration gap. Telling the two apart is critical for your security.

What Should Normally Happen?

In a correctly configured CONNECT tunnel, the proxy never touches the certificate. The TLS handshake is carried out directly between the client and the target server; the proxy only carries the encrypted bytes. The certificate is therefore the target site's real certificate.

FIGUREThe certificate flow in a healthy tunnel
NORMALClientProxyTarget serverCONNECT request200 establishedClientHelloForward the bytesThe real certificateThe proxy sees the certificate but cannot change it

A certificate error is not expected in this flow. If there is one, either there has been interception or the client's certificate store is incomplete.

Causes of Errors

FIGUREThe sources of certificate errors with proxies
DIAGNOSISCODE / SYMPTOMLIKELY CAUSESOLUTIONunable to get local issuercertificateThe client's root certificate store is missing/out of dateUpdate the CA bundle (ca-certificates)self signed certificate inchainThere is an inspection layer in the middleVerify the corporate root certificate and add itcertificate has expiredThe target's certificate has expired, or the systemclock is wrongCheck the system clockhostname mismatchThe certificate name does not match the SNICheck the target address and the proxy configurationThe app does not open(pinning)Certificate pinning is rejecting the interceptionUse a channel where TLS is not intercepted

The second row is a warning sign: if there is a self-signed certificate in the chain, your traffic may be being read.

How to Detect SSL Inspection

FIGUREInspecting the certificate chain
Terminal01# Who signed the certificate through the proxy?02curl -v -x http://proxy.example.com:8080 https://example.com 2>&1 \\03 | grep -E "subject:|issuer:|SSL certificate"0405# Compare with a direct connection06curl -v https://example.com 2>&1 | grep -E "subject:|issuer:"0708# If the issuer differs between the two outputs, there has been interception0910# Detailed chain with openssl11openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null \\12 | openssl x509 -noout -issuer -subject -dates

If the issuer values in the two outputs differ, the proxy is performing TLS interception and can read your traffic.

Security warning

Silencing a certificate error with -k or verify=False does not fix the problem — it only makes it invisible. It means letting anyone in the middle read your traffic. Never use it in production.

The Right Solutions

01

Update the root certificate store

This is the most common cause. On Linux run update-ca-certificates, in Python a custom connector with certifi package.

02

Verify the corporate root certificate before adding it

If you are on a corporate network and that is the policy, add the root certificate you obtained from your IT department to your client's trust store. Never add a certificate you downloaded from the internet.

03

Check the system clock

A wrong system clock makes valid certificates appear "expired". This is common on virtual machines.

04

Use a channel without TLS interception

Applications that use certificate pinning will not accept interception. In that case you need mobile data or a direct connection.

Per-Application Certificate Stores

Not every application uses the system trust store. This is the explanation for the "it works in the browser but not in my script" situation:

EnvironmentCertificate storeHow to add
Linux system tools/etc/ssl/certsupdate-ca-certificates
Python (requests)certifi packageREQUESTS_CA_BUNDLE variable
Node.jsBuilt-in storeNODE_EXTRA_CA_CERTS variable
Javacacerts keystorekeytool -import
FirefoxIts own storeSettings → Certificates
ChromeSystem storeOperating system setting
FIGUREIntroducing an extra root certificate to an application
Environment variables01# Python requests02export REQUESTS_CA_BUNDLE=/yol/kurumsal-kok.pem0304# Node.js05export NODE_EXTRA_CA_CERTS=/yol/kurumsal-kok.pem0607# curl08curl --cacert /yol/kurumsal-kok.pem -x http://proxy.example.com:8080 https://example.com0910# Git11git config --global http.sslCAInfo /yol/kurumsal-kok.pem1213# Linux system-wide (be careful)14sudo cp kurumsal-kok.crt /usr/local/share/ca-certificates/15sudo update-ca-certificates

Adding a certificate system-wide makes it trusted for every application. Do it only for certificates whose source you are sure of.

Certificate Pinning

Some mobile apps and banking clients pin the server's certificate inside the application. When they see an intercepting certificate they refuse the connection — no root certificate you add will change that behaviour.

This is the reason behind the complaint "the app does not open on the corporate Wi-Fi but works on mobile data". The only solution is to use a channel without TLS interception for that app.

Summary

In a healthy CONNECT tunnel the proxy does not touch the certificate; if you are seeing an error, either your client's root store is incomplete or there is an inspection layer in the middle. To tell the two apart, compare the issuer value in the certificate chain against a direct connection. Turning verification off is not a solution, it only makes the risk invisible. To see what your connection really leaks, anonymity test you can use our tool.

Frequently Asked Questions

01Why do I get a certificate error when I use a proxy?

There are two main reasons: your client's root certificate store may be missing or out of date, or an inspection layer in the middle (SSL inspection) may be replacing the certificate.

02Can I disable certificate verification?

Technically yes, but do not do it. Turning verification off lets anyone in the middle read and alter your traffic. Fix the root cause of the problem instead.

03How do I know someone is intercepting?

Compare the certificate's issuer information through the proxy and over a direct connection. If they differ, there is an interception layer in the middle.

04Should I add the corporate root certificate?

If you work on a corporate network and policy requires it, yes — but obtain the certificate only from your IT department. Never add a root certificate downloaded from the internet to your trust store.

05Why does an app not open at all on the corporate network?

It may be using certificate pinning. Such apps pin the server's certificate internally and reject an intercepting certificate. Adding a root certificate does not change this behaviour.

Related Articles and Pages

NEXT STEP

Strengthen your proxy setup today.

Get started in minutes with a paid plan, or try our free proxy list first.

FREEPROXY.TR

Looking for a free proxy? You're in the right place

A complete proxy platform where you can browse up-to-date free proxy addresses, compare HTTP and SOCKS proxy types, and check your proxy connections with free tools.