Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Introduction

Akāmu is a self-hosted certificate authority that speaks the ACME protocol defined in RFC 8555. It is written in Rust and is designed to be operated inside a private network or behind a reverse proxy, issuing X.509 certificates to ACME clients such as certbot, acme.sh, or any RFC 8555-compliant library. The project is organized as a Cargo workspace. In addition to the server binary, it ships standalone client libraries — see Client Libraries.

For a detailed breakdown of RFC and draft coverage — including which sections are implemented, which are intentionally omitted, and post-quantum support — see the RFC Support Reference.

What it does

  • Implements the full RFC 8555 ACME server protocol: directory, nonces, accounts, orders, authorizations, challenges, certificate issuance, and revocation.
  • Validates domain ownership using http-01, dns-01, tls-alpn-01, and dns-persist-01 challenge types (RFC 8555 §8, RFC 8737, and the Let’s Encrypt dns-persist-01 specification).
  • Validates TNAuthList and JWTClaimConstraints identifiers using the tkauth-01 challenge type (RFC 9447 / RFC 9448), verifying signed authority tokens issued by an external Token Authority.
  • Issues end-entity certificates signed by a built-in Certificate Authority whose key and self-signed root are generated automatically on first run, or loaded from existing PEM files.
  • Persists all ACME objects (accounts, orders, authorizations, challenges, certificates, nonces) in a SQL database. The supported backends are SQLite (default; single-file, no external service required), PostgreSQL, and MariaDB/MySQL, selected by the database.url configuration key.
  • Generates and serves CRLs (Certificate Revocation Lists) at GET /ca/crl.
  • Serves OCSP responses at GET /ca/ocsp/{request} and POST /ca/ocsp (RFC 6960).
  • Implements the ACME Renewal Information extension (RFC 9773) so ACME clients know when to renew.
  • Optionally appends issued certificates to a Merkle Tree Certificate transparency log using the synta-mtc library.
  • When external_account_required = true, performs full HMAC verification of the externalAccountBinding JWS (HS256/HS384/HS512), confirms the payload is the account key, and atomically consumes the EAB key on account creation. EAB keys can be provisioned in two ways: statically in the TOML config under [server.eab_keys], or derived on demand via HKDF-SHA-256 (RFC 5869) when [server].eab_master_secret is set and the client authenticates via GSSAPI or a trusted proxy (GET /acme/eab).
  • Optionally terminates TLS directly using rustls, with an auto-generated certificate on first run. Supports mutual TLS (mTLS) client certificate authentication with configurable CA trust anchors, chain depth, RSA modulus enforcement, and post-quantum client certificate acceptance.
  • Supports multi-node clustering through a built-in CRDT + gossip replication layer. All domain state (accounts, orders, authorizations, challenges, certificates, EAB keys, operators, delegations, MTC) is replicated to every cluster member via signed gossip envelopes. Nodes are registered with each other via the POST /admin/gossip/register admin endpoint. When the [gossip] section is absent the node runs in single-node mode with no replication overhead.

What it does not do

  • It does not support wildcard certificates via http-01 or tls-alpn-01 (only dns-01 and dns-persist-01 can authorize wildcard identifiers per RFC 8555 §7.1.3).

Technology stack

ComponentLibrary
Async runtimetokio
HTTP frameworkaxum 0.8
Databasesqlx 0.8 (SQLite / PostgreSQL / MariaDB via Any backend)
Schema migrationssqlx built-in migrate
X.509 / PKCS#10 / CRLsynta-certificate
MTC transparency logsynta-mtc
DNS resolutionhickory-resolver
TLS serveraxum-server + rustls
TLS clientrustls + tokio-rustls
HTTP clienthyper 1
ConfigurationTOML
JWK/JWS primitivesakamu-jose (workspace crate)
ACME client libraryakamu-client (workspace crate)
CLIakamu-cli (workspace crate)
CRDT replicationakamu-crdt (workspace crate) — LWW-register, OR-map, LWW-map, GrowSet primitives

Standards implemented

Reading guide

The documentation is split into three sections targeting distinct audiences:

SectionWho it is forWhat it covers
Operator GuideSystem administrators deploying and running AkāmuInstallation, configuration, account policies, certificate issuance, revocation, TLS, backup
API ReferenceDevelopers consuming Akāmu’s HTTP APIs or using the Rust client librariesAdmin REST API, ACME protocol details (algorithms, challenge types, error codes, wire formats), akamu-jose / akamu-client / akamu-cli
Implementation GuideContributors working on the Akāmu source codeArchitecture, database schema, CA internals, challenge validation, EAB and account internals, testing

Quick navigation

New to Akāmu? Start with the Quick Start guide.

Deploying or configuring the server? See the Configuration Reference for every configuration key, or Operator Roles for RBAC setup.

Building an ACME client or integrating via the API? Start with ACME Protocol Reference for the wire-level details, Admin API for the management REST API, or akamu-client for the Rust library.

Contributing to Akāmu? Read the Architecture chapter first — it includes a full system diagram covering all subsystems and their interactions.