Deploy the inline proxy
Turn on CID222's own forward proxy, distribute its certificate authority, point browsers at it with a proxy auto-configuration file, and prove a detection fires.
- Version: 0.4
- Feature: icap
- Role: admin_user
- Type: task
Make CID222 the secure web gateway for browser traffic to model providers. You start the forward-proxy container, distribute the certificate authority it generates, point managed browsers at it, and confirm that a prompt containing personal data is masked or refused before it leaves the network.
What do I need?
- Licence
- Any
- Role
admin_user
Prerequisites
- The appliance has completed the first-boot setup wizard and you can sign in to the dashboard.
- You can run compose commands on the appliance host, or your operator can.
- The customer has no secure web gateway of their own — if they do, connect it instead, see ICAP and third-party gateways.
- Endpoints are centrally managed, so a certificate authority and a proxy setting can be pushed to them.
- TCP 8443 on the appliance is reachable from the client subnets, and free on the appliance host.
- Saving the appliance-wide inspection policy requires the superadmin account.
The proxy decrypts the session with a certificate authority it generates on first start. Every client whose traffic it intercepts must trust that authority, or the browser refuses the connection with a certificate error. Distributing it is not an optional hardening step; it is the deployment.
Warning
Inspect a given hostname at one point only. If the customer also runs a gateway that sends the same hostnames to CID222, turn that off before you turn this on — a doubly inspected image upload is refused.
Start the proxy and publish its certificate authority
Start the inline-proxy profile
On the appliance host, start the opt-in profile:
The container starts, and its first log lines report the certificate authority and the listen modes:
The authority is generated once and kept in a volume, so a restart reuses it and reports
reusing existing CA instead.
Confirm the appliance sees it
Select Detection & Filtering → Browser Inspection and read the Root CA certificate & PAC panel.
The panel shows CA fingerprint (SHA-256) with the authority's fingerprint. While the container is not running it shows Inline proxy is not running on this appliance instead, and the download buttons stay disabled.
/assets/screenshots/inspection-ca-pac@0.4.pngDownload the certificate authority
Select the format your endpoint management wants: cid222-root.crt, cid222-root.pem or cid222-root.cer.
The file downloads. The .cer form is binary DER, which is what Windows expects; the other two
are PEM text.
Check the fingerprint out of band
Compare the CA fingerprint (SHA-256) shown in the panel with the fingerprint your appliance operator gives you by another channel.
They match. If they do not, stop — you are about to make every managed endpoint trust a certificate authority that is not the appliance's.
Distribute the certificate authority to clients
Push it as a trusted root
On a domain controller, edit or create a Group Policy object linked to the organisational unit holding your managed endpoints, and import the downloaded file under Computer Configuration → Policies → Windows Settings → Security Settings → Public Key Policies → Trusted Root Certification Authorities.
On the next policy refresh, the authority appears in each endpoint's trusted root store.
Refresh one machine immediately with gpupdate /force to test.
Cover browsers that keep their own trust store
Chrome, Edge and Internet Explorer read the Windows root store. Firefox does not: set its
security.enterprise_roots.enabled policy so it honours the system store.
A Firefox left unconfigured shows a certificate warning on every intercepted site, which is how you notice this step was skipped.
Route traffic through the proxy
The appliance serves a proxy auto-configuration script at https://<appliance-fqdn>/proxy.pac.
/wpad.dat serves the identical script for clients that discover a proxy automatically.
Both are unauthenticated, because a client fetches them before it has any credential, and both
are cached by the client for five minutes.
The script is generated from the live inspection policy. Every enabled hostname returns
PROXY <appliance>:8443; DIRECT for that host and its subdomains; every bypass hostname and
everything else returns DIRECT. The appliance name in the script is the host the client used
to fetch it, so the same URL works by name or by address.
Push the URL to managed browsers with the Internet Settings policy preference, under User Configuration → Preferences → Control Panel Settings → Internet Settings: enable Use automatic configuration script and set Address to the URL. Chrome and Edge follow the Windows proxy setting.
Set the inspection policy
Open the policy
On Browser Inspection, read the Policy configuration panel.
The fields are Enabled hostnames, Bypass hostnames, Allowed ICAP peer IPs / CIDRs, Inspection timeout (ms), mTLS client subject DN, Fail closed (BLOCK) on timeout and Policy active.
List the hostnames to inspect
Put one hostname per line in Enabled hostnames.
Saving replaces the built-in default list, so carry forward every host you still want covered.
The default list is the conversation endpoints — chat.openai.com, chatgpt.com, claude.ai,
gemini.google.com, chat.deepseek.com, chat.qwen.ai, poe.com, character.ai — and
the separate hosts that carry uploaded file bytes: oaiusercontent.com,
push.clients6.google.com and a-cdn.claude.ai.
Exclude what must never be read
Put banking, payroll, human-resources and legal hostnames in Bypass hostnames.
A bypassed host returns DIRECT in the auto-configuration script, so those sessions are never decrypted.
Choose what happens when inspection is slow
Set Inspection timeout (ms), and decide Fail closed (BLOCK) on timeout.
Closed refuses a request the pipeline could not finish in time; open forwards it uninspected. There is no third option and no background retry — inspection is synchronous.
Save
Turn on Policy active and select Save policy.
The panel reports Inspection policy updated. The auto-configuration script picks the new hostnames up within the five-minute client cache.
Note
Allowed ICAP peer IPs / CIDRs does not apply to this deployment. It gates peers dialling the ICAP listener on port 1344; the inline proxy calls the gateway's HTTP inspection endpoint from the appliance itself.
What is actually inspected
The proxy does not inspect everything from an enabled hostname. It matches a strict allowlist of conversation and upload endpoints — fifteen rules covering ChatGPT, the OpenAI API, GitHub Copilot chat, Claude, Gemini, DeepSeek, Qwen, Poe and Character.ai — and forwards everything else from those hosts untouched. A single page load fires dozens of requests for scripts, fonts and telemetry; none of them carries a prompt, and inspecting them produced both latency and false positives.
Three consequences are worth stating before the first support call:
- A provider not on the list is not inspected, even if its hostname is routed through the proxy. New frontends need a rule.
- Large bodies are skipped, not blocked. Text bodies over 512 KB and binary bodies over 25 MB are forwarded without inspection.
- Fragmented uploads are refused. A chunked or resumable upload cannot be inspected one
fragment at a time, so
CID_RESUMABLE_UPLOAD_POLICYdefaults toblockand the browser sees a failed upload. Setting it topassthroughrestores the old behaviour, in which the file reaches the provider unredacted.
Verify
- From a managed workstation, open one of the enabled hostnames. The page loads with no certificate warning, and the certificate the browser reports is issued by the CID222 proxy authority rather than the provider's own.
- Browse to a hostname that is not in the policy. Its certificate is the real one, proving that site is not being decrypted.
- In the same session, send a prompt containing a recognisable test value — a fake card number
such as
4111 1111 1111 1111. Depending on the rule's action, the provider receives the value masked, or the browser shows the Request blocked page carrying the headerX-Blocked-By: cid-core. - Select Detection & Filtering → All Detections and filter the source to browser traffic. The
attempt appears within seconds as
MESSAGE_MASKEDorMESSAGE_BLOCKED, with the hostname, the source address and the reasons. - Upload an image containing readable personal data to an enabled provider. The event
FILE_UPLOAD_REDACTEDappears, and the model describes the fields as blacked out. What the model says is the ground truth here — the thumbnail in the browser is always your local original.
If it fails
- The browser shows a certificate-authority error on every intercepted site → the authority is not
in that machine's trust store. Confirm with
certutil -store Root | findstr cid222, then force a policy refresh. - The authority is installed and warnings continue → the appliance was reset and regenerated the authority. The fingerprint in the panel no longer matches the one deployed; re-download and re-distribute.
- The auto-configuration URL is reachable but nothing is proxied → the proxy setting did not
reach the browser. Check the policy preference applied, and that
INLINE_PROXY_PUBLIC_PORT— the port the script advertises — matchesINLINE_PROXY_HTTPS_PORT, the port the proxy listens on. When they disagree, browsers connect somewhere else and no error appears anywhere. - Events arrive but the panel shows the container as not running → A service is unhealthy.
- Uploads fail with no redaction event → the host carrying the file bytes is missing from Enabled hostnames. Upload hosts are separate from conversation hosts.
Next steps
- ICAP and third-party gateways — the alternative when the customer already runs a secure web gateway, and the one path with a lab-verified vendor.
- Interception topologies — what this deployment cannot see, stated plainly enough to hand to a security officer.
- Network prerequisites — the ports this deployment opens and the variables that move them.
Last updated on