ProxyZip / Docs / Certificates
Certificates
How HTTPS interception works
When an application opens a secure connection through ProxyZip, ProxyZip:
- Reads the host name the client asked for (the TLS server name).
- Creates a certificate for that host, signed by the ProxyZip root CA.
- Completes the TLS handshake with the client using that certificate.
- Opens its own, fully verified TLS connection to the real server.
- Forwards the traffic between the two while recording it.
The client only accepts step 3 if it trusts the ProxyZip root CA. That is why you install it once.
Where the CA lives
| Platform | Directory |
|---|---|
| macOS | ~/Library/Application Support/ProxyZip |
| Windows | %APPDATA%\ProxyZip |
| Linux | ~/.local/share/ProxyZip |
Set PROXYZIP_HOME to use a different directory. It contains:
proxyzip-ca.pem: the public certificate, safe to share.proxyzip-ca-key.pem: the private key. Keep it secret. It is written with owner-only permissions on Unix.
proxyzip ca path prints the certificate path.
Installing the CA
The desktop app and the CLI do the same thing.
| Platform | What happens | CLI |
|---|---|---|
| macOS | Added to your login keychain and trusted for TLS | proxyzip ca install |
| Windows | Added to the current user's Trusted Root Certification Authorities | proxyzip ca install |
| Linux | Copied to the system trust anchors (asks for permission through pkexec) and, when present, added to the user's NSS database used by Chrome and Chromium |
proxyzip ca install |
| iOS Simulator | Installed into the booted simulator | proxyzip ca ios-simulator |
Check the current state with proxyzip ca status. Remove the CA with proxyzip ca uninstall.
Other places that need their own setup
- Firefox keeps its own certificate store. Import
proxyzip-ca.pemunder Settings → Privacy & Security → Certificates → View Certificates → Authorities → Import, or enablesecurity.enterprise_roots.enabledinabout:config. - Node.js, Python, Go, Ruby, curl read the CA from environment variables.
eval "$(proxyzip env)"sets them. - Java uses its own keystore. Import the certificate with
keytool -importcert. - Physical phones and tablets: open
http://proxyzip.certthrough the proxy. See Getting started.
Certificate pinning
Some applications only accept specific certificates (pinning), so they reject the ProxyZip CA no matter what the
system trusts. ProxyZip shows these as failed CONNECT requests with a TLS error.
You can stop decrypting those hosts so the application keeps working:
- Right-click the request and choose Don't decrypt
<host>, or - Add the host to Settings → SSL proxying → Never decrypt (wildcards such as
*.example.comwork).
Excluded hosts are tunnelled untouched, so you still see that a connection happened, just not its contents.
Rotating the CA
Settings → Certificate → Regenerate (or proxyzip ca regenerate) creates a new CA. Remove the old one from your
trust stores first, then install the new one.
Security notes
- Anyone with the private key can impersonate any website to a device that trusts the CA. Do not copy it to other machines, and uninstall the CA from devices you no longer test with.
- The CA has a path length of zero, so it cannot issue intermediate CAs. Leaf certificates are valid for one year.