Naming, DNS and TLS
Give the appliance the names its clients use, serve a certificate they trust, and distribute the root CA before anyone needs it.
- Version: 0.4
- Role: admin_user
- Type: task
Reaching the appliance by IP is fine for a first look. Everything else — the browser extension, Claude Code, an API client, a web gateway — refuses plain HTTP and refuses a certificate it does not trust. You give the appliance names, decide which authority signs its certificate, and make your clients trust that authority.
What do I need?
- Licence
- Any
- Role
admin_user
Prerequisites
- The appliance has completed the first-boot setup wizard.
- You can create A records in the DNS zone your clients resolve.
- You have decided which names the appliance answers on — typically one each for the dashboard, the gateway API and the LLM proxy, or one wildcard covering all three.
- You can distribute a root certificate to your client machines, through Group Policy, MDM, or by hand.
- For an externally signed certificate: a CA that will sign a certificate-signing request for those names.
The appliance answers on three names, all pointing at the same box: the dashboard your team opens,
the API the extension and the firewall block-list call, and the OpenAI- and Anthropic-compatible
proxy that Claude Code and API tools point at. Their values live in the appliance's own
environment as APP_DOMAIN, API_DOMAIN and PROXY_DOMAIN.
Give the appliance its names
Create the DNS records
Add A records for the three names to the appliance's IP address, in the zone your client machines resolve.
nslookup app.<your-domain> from a client machine returns the appliance's address. Do this
before you issue a certificate: a name that does not resolve cannot be validated by anything.
Tell the appliance which names it answers on
Select Settings → Certificates, enter the names in Names, comma-separated, and select Save names and reissue.
The appliance reissues its certificate with those names in the subject alternative name, on top of its own hostname and IP addresses. The page shows Applying on the host while the change runs and refreshes when it finishes; a second change cannot be queued until then.
/assets/screenshots/settings-certificates@0.4.pngChoose who signs the certificate
Three paths exist, and the page states which one this appliance is on under Mode.
The default for new installations. The appliance holds a box-local root CA valid for ten years and signs its own certificate from it. You distribute the root once; renaming the appliance or renewing its certificate never repeats that work, because only the certificate changes.
Switch to the appliance CA if the appliance is not already on it
Select Use the appliance CA for HTTPS.
The appliance replaces the current certificate with one from its own CA. Browsers that have not yet trusted that CA warn once more, until you complete the next section.
Warning
An appliance installed from an older ISO can still be on its original bare self-signed certificate, which every browser warns about on every device. The page says so explicitly. Switching to the appliance CA, or installing your own certificate, is what clears it.
Make clients trust the appliance
Download the appliance root certificate
On Settings → Certificates, verify the CA fingerprint (SHA-256) shown on the page, then
download cid222-appliance-root.crt.
The download is public, so a machine that does not yet trust the dashboard can still fetch it:
Compare the fingerprint of the file you fetched against the one on the page before you distribute it. Skip this section entirely if you installed a certificate from a CA your machines already trust.
Distribute it to your fleet
Install the root certificate into each platform's machine-wide trust store.
Deploy by Group Policy: Computer Configuration → Policies → Windows Settings → Security Settings → Public Key Policies → Trusted Root Certification Authorities, then import the file and apply the policy to the workstation OU.
On a test machine, gpupdate /force followed by certmgr.msc shows the certificate under
Trusted Root Certification Authorities.
Confirm the trust took on a real client
From a client machine, open the dashboard by name.
The page loads with no certificate warning. A warning here means the certificate did not reach that particular browser's store, not that the appliance is misconfigured — Chrome on Linux and Firefox on every platform read stores that the others do not.
Let the appliance out through a TLS-inspecting proxy
If your network re-signs outbound HTTPS with its own authority, the appliance cannot reach the LLM providers or the update channel until it trusts that authority.
Paste the proxy's issuing CA
On Settings → Certificates, under Outbound trust (TLS-inspecting networks), paste the proxy's issuing CA certificate and select Trust this CA for outbound connections.
The appliance queues the change for the host, which adds the certificate to the trust stores that the gateway and the updater use. This is the outbound direction only and does not change what the appliance presents on 443.
Keep an eye on expiry
Settings → Certificates reports Valid until and the days remaining for the certificate it currently serves, and raises a notice on the page when fewer than 30 days remain. A certificate from the appliance CA is renewed automatically by the host on its next reconcile; a certificate your own PKI signed is not, and must be renewed and uploaded before it lapses. Appliance-CA certificates are issued for at most 825 days, and the CA that signs them for ten years.
Warning
A certificate that fails validation is refused and the appliance keeps serving the one it already has, so a bad upload costs you nothing. An expiry you did not plan for does: start an external signing well before the date, because the CA's turnaround, not the appliance, is the long pole.
Verify
- From a client machine, open the dashboard by its name over HTTPS. The page loads with no certificate warning.
- On Settings → Certificates, Names (SAN) lists every name you entered, and Valid until is in the future with no expiry notice.
- The Mode row reads the authority you chose, not the setup-time self-signed certificate.
- Point one real client at the appliance — the browser extension, or Claude Code at the proxy name — and confirm it connects rather than failing the TLS handshake.
If it fails
The certificate has expired, or nothing is serving 443
You might see: ERR_CERT_DATE_INVALID · NET::ERR_CERT_AUTHORITY_INVALID · connection refused on 443 · the dashboard cannot be reached over HTTPS
Before you start
Checks
- 1
Verify something is actually holding port 443 on the appliance host
diagnostics · appliance.tls.servedBy
- 2
Verify the appliance has a certificate to serve
diagnostics · appliance.tls.mode = "none"
- 3
Read how many days the served certificate has left
diagnostics · appliance.tls.daysLeft = 0
- 4
Check whether the certificate is inside the renewal window — 30 days, the `CID_TLS_RENEW_DAYS` default `appliance/tls/ensure-tls.sh` renews an appliance-issued leaf at and warns about a customer certificate at
diagnostics · appliance.tls.daysLeft = 30
- 5
Verify the appliance root CA is present, so clients can be made to trust an appliance-issued certificate
diagnostics · appliance.tls.caPresent = true
Causes and fixes
| Reached when | Cause | Explanation, fix and verification |
|---|---|---|
| check 1 fails | nothing-on-443 (critical) | No process holds 443, so the client's connection is refused before any TLS handshake begins. The browser reports a connection error rather than a certificate error, which is why this does not look like a TLS problem at first. It follows a failed certificate rollout: the front-end refuses to start with an unusable certificate rather than serving a broken one. Fix: Run the host repair from Settings → System Updates, which re-establishes the HTTPS front end and re-applies the appliance's certificate intent. Then reload the dashboard. If repair reports a certificate problem, resolve that first — the front end will keep refusing to start until the certificate it is told to serve is valid. Verify: diagnostics · appliance.tls.servedBy If that does not apply: Attach the support bundle, which carries the host HTTPS inventory. |
| check 2 fails | no-certificate (critical) | The appliance has no certificate configured at all — neither one issued by its own CA nor an uploaded one. Nothing can be served on 443 until it does. Fix: Issue a certificate from the appliance CA under Settings → Certificates, or upload one your organisation's CA signed against a CSR generated there. See Naming, DNS and TLS. Verify: diagnostics · appliance.tls.mode = "none" |
| check 3 fails | certificate-expired (critical) | The served certificate is past its expiry. Browsers refuse the connection outright, and clients that were configured to trust the appliance — the inline proxy's own callers, the browser extension, the endpoint agent — fail closed rather than degrading. Fix: Issue a replacement now. An appliance-CA certificate is reissued in place from Settings → Certificates; an externally signed one needs a fresh CSR, signature and upload. Check the host clock before blaming the certificate: a skewed clock makes a valid certificate look expired. Verify: diagnostics · appliance.tls.daysLeft = 0 |
| check 4 fails | certificate-expiring-soon (warning) | The certificate is still valid but inside the renewal window. Renewing now avoids an outage that would otherwise arrive without warning, and gives time for an external CA to turn a CSR around. Fix: Renew the certificate before it expires, following Naming, DNS and TLS. If the certificate is externally signed, start now — the signing turnaround, not the appliance, is the long pole. Verify: diagnostics · appliance.tls.daysLeft = 30 |
| check 5 fails | ca-missing (warning) | The appliance root CA is absent, so clients cannot be made to trust an appliance-issued certificate and the public root-CA download has nothing to serve. Every client then reports an untrusted-authority error even when the certificate itself is current. Fix: Re-create the appliance CA under Settings → Certificates, redistribute the root certificate from the appliance's public download path, and reissue the server certificate. Note that reissuing invalidates trust that clients had already established, so plan the redistribution before you reissue. Verify: diagnostics · appliance.tls.caPresent = true |
Next steps
- Update the appliance — an update never changes the certificate the appliance serves.
- Hardening checklist — the rest of the settings that are the operator's responsibility rather than the image's.
- Backup and restore — the private keys live on the appliance host, so they need to be in your backup.
Last updated on