The Problem

Managing SSL certificates across many cloud providers requires repeatedly handling ACME challenges, DNS‑based validation, and manual deployment. Teams that operate services on multiple platforms face a repetitive, error‑prone workflow for issuance, renewal, and placement of certificates.

What This Does

Certimate is a self‑hosted ACME client that automates the full certificate lifecycle. The repository is organised around three core packages:

  • pkg/ (1281 files) – core business logic, scheduler, and singleton management.
  • ui/ (655 files) – React front‑end built with Vite; provides a visual dashboard for status and configuration.
  • internal/ – split into certacme (ACME client, account handling, and >200 certifier plugins such as internal/certacme/certifiers/sp_cloudflare.go) and certmgmt (deployer plugins such as internal/certmgmt/deployers/sp_aws_alb.go).

Renewal is driven by internal/app/scheduler.go, which runs periodic jobs; internal/app/singleton.go ensures only one instance processes certificates at a time. The UI contacts the backend through the Express server started by cmd/serve_nonwindows.go or cmd/serve_windows.go.

How It Is Wired

Execution begins at a CLI entry point:

Entry pointRole
cmd/intercmd.goParses flags, loads configuration, dispatches to serve or one‑shot modes.
cmd/serve_nonwindows.go / cmd/serve_windows.goStarts the HTTP server that serves the UI and API.
cmd/version.goPrints the binary version.

The typical run flow:

  1. cmd/intercmd.go reads config from internal/certacme/config.go (file path or env‑var driven).
  2. The selected certifier (e.g., sp_cloudflare.go) is instantiated via internal/certacme/certifiers/registry.go.
  3. internal/certacme/client.go performs the ACME challenge; DNS‑01 validation is handled by the certifier’s provider API.
  4. Upon successful issuance, internal/certmgmt/deployers/registry.go selects the appropriate deployer (e.g., sp_aws_alb.go) to push the certificate to the target platform.
  5. The scheduler (internal/app/scheduler.go) repeats the cycle at the configured interval; internal/app/singleton.go guards against overlapping runs.

All network calls stay within the Go process; no external database or runtime is required.

How To Use It

Setup

git clone https://github.com/moses-y/certimate
cd certimate
# Build binary
make build          # uses the Makefile
# Or build Docker image
docker build -t certimate -f Dockerfile .

Configuration Configuration is read by internal/certacme/config.go. Supported options include the ACME server URL, email, and the path to a JSON or YAML file containing provider credentials. The file format is defined in that source; no separate env‑var schema is imposed outside the Go code.

Running it

  • One‑shot renewal: ./certimate renew (invoked via cmd/intercmd.go).
  • Continuous server with UI: ./certimate serve (starts the Express server referenced in cmd/serve_nonwindows.go/cmd/serve_windows.go).
  • Docker: docker run -v /path/to/config:/etc/certimate certimate serve.

Real‑World Use

A mid‑size SaaS running services on both Cloudflare and AWS ALB can configure two certifiers and deployers:

# config.example.toml (illustrative)
certifiers = ["cloudflare"]
deployers = ["aws_alb"]

The scheduler (internal/app/scheduler.go) will, each day, ask Cloudflare to create a TXT record for domain validation, obtain the certificate via the ACME server, and then call internal/certmgmt/deployers/sp_aws_alb.go to install the cert on the ALB. The UI shows the status of each step, allowing operators to verify that renewal succeeded without logging into each cloud console.

Code Health & Issues

Static analysis reports:

  • 208 test files exist across the repository.
  • 16 documentation files (including README.md, CHANGELOG.md, and language‑specific guides).
  • No missing licence or lockfile; CI pipelines (github/workflows/*.yml) run tests and publish Docker images.

The most notable maintainability consideration is the extensive provider surface: over 200 certifier and 200+ deployer implementations (internal/certacme/certifiers/ and internal/certmgmt/deployers/). While this gives broad compatibility, it also means a larger surface for compatibility bugs and requires contributors to be familiar with many external APIs.

The Bottom Line

Certimate delivers a self‑hosted, multi‑cloud ACME solution out of the box. Its strength lies in the sheer number of integrated providers and the visual UI that removes much of the manual drudgery. Teams that need to manage certificates across many platforms and have ops resources to maintain the many integrations will find it valuable. New contributors should expect a steep learning curve because of the extensive plugin ecosystem, but the codebase is well‑structured with clear entry points and no missing build artefacts.