Caddy Proxy Manager includes a built-in Certificate Authority for issuing client certificates used in mutual TLS (mTLS) authentication. You can require clients to present a valid certificate before Caddy forwards the request to your upstream, with optional role-based path rules.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/fuomag9/caddy-proxy-manager/llms.txt
Use this file to discover all available pages before exploring further.
How mTLS works in CPM
When mTLS is enabled on a proxy host, Caddy requests a client certificate during the TLS handshake. CPM’s built-in CA issues these certificates, and Caddy validates each client cert against the CA. Connections from clients without a trusted certificate are rejected at the TLS layer — before any application logic runs.Setting up the built-in CA
The built-in CA is created automatically on first startup. Navigate to Certificates → CA Certificates to view the CA and download the root certificate for distribution to clients.Issuing client certificates
Open Client Certificates
Navigate to Certificates → Client Certificates and click Issue Certificate.
Fill certificate details
Enter a name and optional expiry date. CPM generates the key pair server-side.
Enabling mTLS on a proxy host
mTLS configuration options
TheMtlsConfig type on each proxy host supports the following fields:
| Field | Type | Description |
|---|---|---|
enabled | boolean | Enable or disable mTLS for this host |
trusted_client_cert_ids | number[] | Specific issued client certificate IDs to trust |
trusted_role_ids | number[] | Trust all certificates belonging to these mTLS roles |
protected_paths | string[] | null | Paths that require a client certificate (null = all paths) |
excluded_paths | string[] | null | Paths excluded from the mTLS requirement |
mTLS RBAC roles
Roles let you group client certificates and apply path-based access rules:- Navigate to Certificates → mTLS Roles and create a role (e.g.,
ops,read-only). - Assign issued client certificates to the role.
- On a proxy host’s mTLS tab, select the role under Trusted Roles.
- Optionally set
protected_pathssuch as/admin/*to require the role only on sensitive paths.