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 intocertacme(ACME client, account handling, and >200 certifier plugins such asinternal/certacme/certifiers/sp_cloudflare.go) andcertmgmt(deployer plugins such asinternal/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 point | Role |
|---|---|
cmd/intercmd.go | Parses flags, loads configuration, dispatches to serve or one‑shot modes. |
cmd/serve_nonwindows.go / cmd/serve_windows.go | Starts the HTTP server that serves the UI and API. |
cmd/version.go | Prints the binary version. |
The typical run flow:
cmd/intercmd.goreads config frominternal/certacme/config.go(file path or env‑var driven).- The selected certifier (e.g.,
sp_cloudflare.go) is instantiated viainternal/certacme/certifiers/registry.go. internal/certacme/client.goperforms the ACME challenge; DNS‑01 validation is handled by the certifier’s provider API.- Upon successful issuance,
internal/certmgmt/deployers/registry.goselects the appropriate deployer (e.g.,sp_aws_alb.go) to push the certificate to the target platform. - The scheduler (
internal/app/scheduler.go) repeats the cycle at the configured interval;internal/app/singleton.goguards 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 viacmd/intercmd.go). - Continuous server with UI:
./certimate serve(starts the Express server referenced incmd/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.