Skip to main content
Open Source · Self-Hosted · ACME RFC 8555

Your own Certificate Authority
on your own server.

AD-PKI is a complete, self-hosted PKI for automated certificate management. Full ACME compatibility, RFC 3161 timestamping, team access control — and zero cloud dependency.

8555
ACME RFC
3161
TSA RFC
MIT
License
Go · Laravel · Vue
Stack
Features

Everything a modern PKI needs

Built for real infrastructure teams who need reliability, compliance, and control — without the cloud subscription.

RFC 8555

ACME Protocol (RFC 8555)

Drop-in compatible with Certbot, acme.sh, and win-acme. Fully automated certificate issuance and renewal — no manual steps.

Automated

Automated Certificate Lifecycle

Issue, renew, and revoke certificates automatically. Schedule-based rotation with configurable lead time before expiry.

RFC 3161

RFC 3161 Timestamping (TSA)

Built-in Timestamp Authority for trusted, verifiable timestamps on documents and artifacts. Fully RFC 3161 compliant.

3 Roles

Team-Based Access Control

Three-tier permission model: Admins, Managers, and Users. Granular control over who can issue, revoke, or configure.

CRL + OCSP

Revocation & Validation

CRL distribution points and OCSP responder included out of the box. Real-time certificate status checks for all relying parties.

Configurable

Flexible Security Policies

Configure key types (RSA/ECDSA), sizes, validity periods, wildcard rules, SAN requirements, and email constraints per CA.

MIT

Self-Hosted & Open Source

Deploy on your own infrastructure. Full data sovereignty, no vendor lock-in, no telemetry. MIT licensed.

Root + Int.

Multi-CA Hierarchy

Create Root CAs and Intermediate CAs with independent policies. Supports air-gapped offline root CA workflows.

Architecture

How it all fits together

A clean, layered architecture where every component has a single responsibility.

Clients

🐧
Certbot
Linux / macOS
📜
acme.sh
Shell script
🪟
win-acme
Windows
🌐
Browser
Admin UI

Core Services

🔷
Go CA Service
Certificate Authority Core
ACME (RFC 8555)CRLOCSPTSA (RFC 3161)
🟥
Laravel 13 Backend
API · Auth · Business Logic
REST APIAuth (Sanctum)QueuesScheduler
🟢
Vue 3 Frontend
Admin Dashboard · SPA
PiniaVue RouterViteTailwind

Data & Infra

🐘
PostgreSQL
Primary datastore
📁
File System
CA keys & certs
🔐
OpenSSL
Crypto operations
Nginx
Reverse proxy

Request Flow

Client→ ACME / HTTPS →Go CA→ REST API →Laravel→ ORM →PostgreSQL
ACME in Action

Works with your existing tools

Point any ACME client at your AD-PKI directory URL. No code changes, no plugins — just swap the server URL.

terminal — certbot
# Issue a certificate via ACME (RFC 8555)
certbot certonly \
  --server https://your-adpki.example.com/acme/directory \
  --email admin@example.com \
  --agree-tos \
  --standalone \
  -d api.example.com \
  -d www.example.com

# Renew all certificates automatically
certbot renew --quiet
HTTP-01 Challenge
DNS-01 Challenge
Wildcard Certs
Auto-Renewal
Quick Start

Up and running in minutes

From zero to issuing certificates — six steps, Docker required.

01

Clone the repository

Grab the source code from GitLab.

bash
git clone https://gitlab.com/YOUR_NAMESPACE/ad-pki.git
cd ad-pki
02

Configure environment

Copy the example env file and fill in your settings.

bash
cp .env.example .env

# Edit your config
nano .env

# Key settings:
# APP_URL=https://pki.example.com
# DB_CONNECTION=pgsql
# DB_DATABASE=adpki
# DB_USERNAME=adpki
# DB_PASSWORD=secret
03

Start with Docker Compose

Spin up all services with a single command.

bash
docker compose up -d

# Services started:
#  ✔ postgres    (database)
#  ✔ laravel     (API + queue worker)
#  ✔ go-ca       (certificate authority)
#  ✔ nginx       (reverse proxy)
04

Initialize the database

Run migrations and create your admin user.

bash
docker compose exec laravel php artisan migrate --seed

# Create your admin account
docker compose exec laravel php artisan pki:create-admin \
  --email admin@example.com \
  --password secret
05

Generate your Root CA

Open the dashboard and create your Certificate Authority hierarchy.

bash
# Open in your browser
open https://pki.example.com

# Or via CLI
curl -X POST https://pki.example.com/api/ca/root \
  -H "Authorization: Bearer <token>" \
  -d '{"name":"My Root CA","key_type":"rsa","key_size":4096}'
06

Issue your first certificate

Use any ACME client or the API directly.

bash
# Via Certbot (ACME)
certbot certonly \
  --server https://pki.example.com/acme/directory \
  -d api.example.com

# Certificate issued at:
# /etc/letsencrypt/live/api.example.com/fullchain.pem
Tech Stack

Built on battle-tested technology

No experimental dependencies. Every component chosen for reliability, performance, and long-term maintainability.

Go 1.22+

CA Service · ACME · OCSP · TSA

Laravel 13 / PHP 8.4

REST API · Auth · Business Logic

Vue 3 Composition API

Admin Dashboard · SPA · Islands

PostgreSQL 15+

Primary Datastore · Full ACID

Docker Compose

Container Orchestration · Deploy

OpenSSL 3.x

Crypto Operations · Key Gen · CA