Welcome to the CertMate documentation. This folder contains comprehensive guides for all features.
- Installation Guide — Setup, dependencies, production deployment
- Docker Guide — Docker builds, multi-platform, Docker Compose
- Kubernetes Notes — Production resources, OOM sizing, runtime patching
- DNS Providers — supported providers, multi-account, domain alias
- CA Providers — Let's Encrypt, DigiCert, Private CA
- Client Certificates — Client cert lifecycle, web dashboard, batch ops
- Model Context Protocol (MCP) Server — Standalone Node.js server for AI agent integrations
- API Reference — Complete REST API documentation
- Architecture — System design, components, data flow
- Testing Guide — Test framework, CI/CD, coverage
- Certificate Discovery & Inventory — probe/CT-log discovery, inventory, adopt, crypto readiness
- Deploy Hooks — post-issuance hooks: configuration, testing, output redaction
- Webhooks — generic webhooks: payload templates, authentication, signature verification
- Compliance — audit chain, actor attribution, NIS2/eIDAS posture
- Deployment Probes — verifying a renewed certificate is actually served
- Installation — Get CertMate running
- DNS Providers — Configure your DNS provider
- Client Certificates Guide — Create your first certificate
- API Reference — All endpoints with examples
- Architecture — System internals and design
- Testing Guide — How to write and run tests
- Docker Deployment — Production Docker setup
- Kubernetes Notes — Production pod sizing and operational patching
- CA Providers — Configure certificate authorities
- DNS Providers — Enterprise multi-account setup
- two dozen+ DNS providers for Let's Encrypt DNS-01 challenges (see DNS Providers for the full list)
- Multiple CA providers: Let's Encrypt, DigiCert, Private CA
- Multi-account support per DNS provider
- Pluggable storage backends: Local, Azure Key Vault, AWS Secrets Manager, HashiCorp Vault, Infisical, S3-compatible
- Auto-renewal with configurable thresholds
- Docker support with multi-platform builds (ARM64 + AMD64)
- Log Sanitizer — Automatically redacts API tokens, private keys, and sensitive credentials from CertMate logs
- Zombie Certificate Scanner — Multi-threaded filesystem scanner to identify and clean up orphan certificates
- Model Context Protocol (MCP) Server — Standalone Node.js server to integrate with agentic AI assistants
- Self-signed CA with 4096-bit RSA keys
- Full lifecycle management — create, renew, revoke, monitor
- OCSP & CRL — real-time status and revocation lists
- Web dashboard at
/client-certificates - Batch operations — import client certificates in bulk via CSV (up to 100 rows per request)
- Audit logging and rate limiting
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/client-certs/create |
Create certificate |
| GET | /api/client-certs |
List certificates |
| GET | /api/client-certs/<id> |
Get metadata |
| GET | /api/client-certs/<id>/download/<type> |
Download cert/key/csr |
| POST | /api/client-certs/<id>/revoke |
Revoke certificate |
| POST | /api/client-certs/<id>/renew |
Renew certificate |
| GET | /api/client-certs/stats |
Get statistics |
| POST | /api/client-certs/batch |
Batch CSV import |
| GET | /api/ocsp/status/<serial> |
OCSP status |
| GET | /api/crl/download/<format> |
Download CRL |
See API Reference for full documentation.
All features are thoroughly tested:
# Run tests
# The UI suite drives Playwright against a live server and cannot share
# a process with the rest; e2e needs a running instance. Same selection
# `make test` and scripts/release.sh use.
pytest -v --tb=short -m "not ui and not e2e"Test coverage includes:
- CA Operations
- CSR Operations
- Certificate Lifecycle
- Filtering & Search
- Batch Operations
- OCSP & CRL
- Audit & Rate Limiting
- 4096-bit RSA for CA keys
- SHA256 signature algorithm
- Bearer token authentication
- Rate limiting on all endpoints
- Audit logging of all operations
- File permissions 0600 for private keys
- Supports 30k+ concurrent certificates
- Efficient multi-filter queries
- Auto-renewal scheduling
- Batch operations with error tracking
- Installation Issues? → See Installation Section
- API Questions? → See API Reference
- Architecture Questions? → See Architecture Doc
- Something Else? → Open an issue
docs/
README.md this file — documentation index <- you are here
THEME_MIGRATION.md one-off theme migration record
api.md complete REST API reference
architecture.md system architecture
ca-providers.md certificate authorities
compliance.md audit chain, attribution, NIS2/eIDAS
deploy-hooks.md post-issuance deploy hooks
webhooks.md generic webhooks: payload templates, auth, signature
discovery-inventory.md discovery, inventory, adopt, crypto readiness
dns-providers.md DNS providers, multi-account, domain alias
docker.md Docker build and deployment
guide.md client-certificate user guide
index.md client-certificate landing page
installation.md installation and setup
kubernetes.md Kubernetes production notes and Helm chart
mcp.md MCP server for AI agents
probes.en.md deployment probes
testing.md test framework and CI/CD
Beginner → Start Here → Getting Started
Developer → API Reference → Architecture
Advanced → Full API Docs → Architecture Details
- Web Dashboard:
http://localhost:8000/client-certificates - API Docs:
http://localhost:8000/docs/ - Health Check:
http://localhost:8000/health - Audit Logs:
logs/audit/certificate_audit.log
There is no hand-maintained scorecard here. A table of test counts is stale the day after it is written — this one said 27/27 while the suite had grown past two thousand.
The authoritative signal is CI on main: the badges at the top of the project README, and the coverage floor enforced in .github/workflows/ci.yml.
curl -X POST http://localhost:8000/api/client-certs/create \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"common_name": "user@example.com",
"organization": "ACME Corp",
"cert_usage": "api-mtls",
"days_valid": 365
}'curl http://localhost:8000/api/client-certs \
-H "Authorization: Bearer YOUR_TOKEN"curl http://localhost:8000/api/client-certs/USER_ID/download/crt \
-H "Authorization: Bearer YOUR_TOKEN" \
-o certificate.crtSee API Guide for more examples.
CertMate is licensed under the MIT License. See LICENSE file in the repository.
- Check the relevant documentation page
- Review the test files for usage examples
- Check the API Reference for endpoint details
Current Version: 2.26.0
Home • Documentation • GitHub