Skip to main content
CID222 Docs

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.

Choose 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:

curl -kO https://<appliance-fqdn>/certs/appliance-root.crt

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

  1. From a client machine, open the dashboard by its name over HTTPS. The page loads with no certificate warning.
  2. On Settings → Certificates, Names (SAN) lists every name you entered, and Valid until is in the future with no expiry notice.
  3. The Mode row reads the authority you chose, not the setup-time self-signed certificate.
  4. 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

Runbooktls

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. 1

    Verify something is actually holding port 443 on the appliance host

    diagnostics · appliance.tls.servedBy

  2. 2

    Verify the appliance has a certificate to serve

    diagnostics · appliance.tls.mode = "none"

  3. 3

    Read how many days the served certificate has left

    diagnostics · appliance.tls.daysLeft = 0

  4. 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. 5

    Verify the appliance root CA is present, so clients can be made to trust an appliance-issued certificate

    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

On this page

Download PDF