Skip to main content

Owl Proxy

MITM proxy with CA certificate management — server, client, and certificate tools.

Install

pip install owl-proxy

Quick Start

# 1. Generate CA certificate
owl-proxy cert generate

# 2. Install CA into OS trust store (requires sudo)
owl-proxy cert install

# 3a. Run as a standalone proxy server
owl-proxy server --port 8443 --auth user:pass

# 3b. Run as a local MITM client (direct mode)
owl-proxy client --direct

# 3c. Run client forwarding through a remote server
owl-proxy client --remote http://my-server:8443 --auth user:pass

Certificate Setup

Owl Proxy uses a root CA to sign per-domain certificates for HTTPS interception. Both server and client need the CA certificate and private key.

Generate

owl-proxy cert generate
# Saves to ~/.owl-proxy/ca.crt and ~/.owl-proxy/ca.key

Export for sharing

# Full bundle (cert + key) — for setting up server/client on another machine
owl-proxy cert export -d ./certs

# Certificate only — for browser/OS trust installation
owl-proxy cert export -d ./certs --cert-only

Install to OS trust store

Installs the CA so browsers and system tools trust it automatically:

# Install from default location (~/.owl-proxy/ca.crt)
owl-proxy cert install

# Install from a specific path
owl-proxy cert install --cert ./certs/ca.crt

# Preview commands without executing
owl-proxy cert install --dry-run

What it does per platform:

  • macOS: Adds to System Keychain via security add-trusted-cert
  • Linux (Debian/Ubuntu): Copies to /usr/local/share/ca-certificates/ + update-ca-certificates
  • Linux (RHEL/Fedora): Copies to /etc/pki/ca-trust/source/anchors/ + update-ca-trust
  • Windows: Uses certutil -addstore ROOT

Use exported certs on another machine

# Copy the bundle to the target machine, then:
owl-proxy server --ca-cert ./certs/ca.crt --ca-key ./certs/ca.key --auth user:pass
owl-proxy client --ca-cert ./certs/ca.crt --ca-key ./certs/ca.key --remote http://server:8443

Other cert commands

owl-proxy cert info              # Show CA details (CN, expiry, fingerprint)
owl-proxy cert uninstall         # Remove CA from OS trust store

Modes

Server

Run on any machine (Raspberry Pi, VPS, cloud VM, etc.) as a proxy server:

owl-proxy server --host 0.0.0.0 --port 8443 --auth user:pass
owl-proxy server --auth-token my-secret-token
owl-proxy server --no-auth                        # no auth (trusted LAN only)

Client

Run locally as a MITM proxy. Intercepts HTTPS with dynamic per-domain certificates:

# Direct mode — fetches URLs itself (no remote server needed)
owl-proxy client --direct --port 8080

# Remote mode — forwards through an Owl Proxy server
owl-proxy client --remote http://my-server:8443 --auth user:pass --port 8080

# Serve a PAC file for browser auto-configuration
owl-proxy client --direct --pac

Browser Configuration

To use the proxy with a browser, configure it to use the client's address:

System proxy (all browsers):

  • macOS: System Settings > Network > Wi-Fi > Details > Proxies > Web Proxy (HTTP) and Secure Web Proxy (HTTPS) — set to 127.0.0.1 port 8080
  • Windows: Settings > Network & Internet > Proxy > Manual proxy — set to 127.0.0.1:8080
  • Linux (GNOME): Settings > Network > Network Proxy > Manual — set HTTP and HTTPS to 127.0.0.1 port 8080

Firefox (independent proxy settings): Settings > General > Network Settings > Manual proxy configuration — set HTTP Proxy to 127.0.0.1, Port 8080, check "Also use this proxy for HTTPS"

With PAC file (auto-configuration): Start the client with --pac, then point your browser's auto-config URL to:

http://127.0.0.1:8080/proxy.pac

Test with curl:

# HTTP
curl --proxy http://127.0.0.1:8080 http://httpbin.org/ip

# HTTPS (using the CA cert)
curl --proxy http://127.0.0.1:8080 --cacert ~/.owl-proxy/ca.crt https://httpbin.org/ip

Configuration

Settings can be provided via CLI flags, environment variables, or both:

Environment Variable Description
OWL_PROXY_HOST Server bind address
OWL_PROXY_PORT Server bind port
OWL_PROXY_USERNAME Auth username
OWL_PROXY_PASSWORD Auth password
OWL_PROXY_TOKEN Bearer token
OWL_PROXY_TIMEOUT Request timeout (seconds)
OWL_CLIENT_HOST Client listen address
OWL_CLIENT_PORT Client listen port
OWL_REMOTE_SERVER Remote server URL

Data is stored in ~/.owl-proxy/ by default (respects XDG_DATA_HOME).

Security

  • The CA private key (ca.key) can sign certificates for any domain — keep it secure
  • Use chmod 600 on ca.key (done automatically by cert generate and cert export)
  • Always use --auth in production to prevent unauthorized proxy access
  • SSRF protection blocks requests to localhost and private IP ranges

Metadata

Release files for owl-proxy 0.1.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for owl-proxy 0.1.6
File Size Uploaded Provenance Actions
owl_proxy-0.1.6.tar.gz 17.3 kB Without provenance Details for owl_proxy-0.1.6.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for owl-proxy 0.1.6
File Interpreter ABI Platform Actions
owl_proxy-0.1.6-py3-none-any.whl Python 3 none any Details for owl_proxy-0.1.6-py3-none-any.whl

Total release size: 42.3 kB

Release files / owl_proxy-0.1.6.tar.gz

Download URL owl_proxy-0.1.6.tar.gz
Size 17.3 kB
Tags Source
SHA-256 checksum
How to use checksums
887aa76f9f149c73345839645a64eddaf4fa19287bf812287fe461d622ad42f7
BLAKE2b-256 checksum
How to use checksums
22a4d82962ffe9895173dd768ce137cd938225323851edc35bc5df48b350418b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.6

Release files / owl_proxy-0.1.6-py3-none-any.whl

Download URL owl_proxy-0.1.6-py3-none-any.whl
Size 25.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e144066c99507829e0f5af23b8d48c4babe3ebc7eba35b3717a4a5d380b38dd1
BLAKE2b-256 checksum
How to use checksums
3be5f4c5ca23da84b2eb4ecacdd19d06acfcb48dad9d6b84b95d5b5bcd199817
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.6

Security for owl-proxy 0.1.6

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page