Open app

Security & mTLS identity

The agent is designed so that adding it to a server reduces your attack surface rather than adding to it.

A cryptographic identity per agent

Enrollment doesn’t hand the agent a shared secret. Instead:

  • The agent generates a private key locally — it never leaves the host.
  • It sends only a certificate signing request. Demerzel returns a certificate whose identity (demerzel://tenant/agent) is assigned by the server, not chosen by the agent.
  • From then on the agent authenticates with that certificate (mTLS). The enrollment token is single-use and burned.

No inbound surface

The agent is outbound-only. It opens HTTPS connections to Demerzel and listens on nothing. There is no port to firewall, no daemon to exploit for remote access, and no command channel back to your servers: nothing Demerzel sends can make the agent read, run or change anything.

The one thing that flows back: signed fleet decisions

There is a single, narrow exception, and it does nothing unless you turn it on at both ends: Demerzel serves fleet decisions only once an owner or admin enabled them in Settings → Fleet decisions, and a server applies them only once root ran demerzel-warden trust there. While a warden is installed, the agent fetches the bans and unbans Demerzel signed with your organization’s key, and copies them byte for byte, unread, into a directory the warden reads. The agent acts on none of them. The warden — a separate root component with no network access — checks each one’s signature against the key root explicitly trusted with demerzel-warden trust, refuses anything signed with another key or altered on the way, and applies what passes only within its local policy: your allowlists, your caps and the kill switch still win. The only effect a decision can have is on the warden’s own nftables table: an address banned for a limited time, lifted, or protected.

Least privilege

Run the agent as an unprivileged system user that owns only its config directory (see Run the agent as a service). Its stored key and certificate are readable only by that user.

Evidence integrity

Everything the agent reports is recorded as immutable, append-only evidence on the server. Facts are never overwritten, so history is replayable and tampering is detectable.

Read-only, by construction. The agent cannot change your systems. Even a fully compromised Demerzel server has no path to execute anything on an agent host: the most it could do is sign fleet decisions, which only servers whose root trusted that key take — a ban or unban your local policy still bounds, never a command and never code.