Self-hosted · Docker · EasyRSA, but a web panel

Your EasyRSA scripts, as a web panel // init-pki · build-ca · build-server-full · sign-req · gen-crl

OwnCA is a self-hosted web panel that does what your pile of EasyRSA shell scripts does — stand up roots and intermediates, issue and revoke X.509 certificates, keep CRLs fresh — only from a UI instead of a terminal. It runs on stock OpenSSL with RSA, ECDSA and Ed25519; GOST R 34.10-2012 is strictly opt-in, and with it switched off you're on a clean, unpatched OpenSSL build with no engine to install.

10built-in profiles
4key families
2PFX dialects
RU / ENUI & webhelp
https://ca.ownca.example/dashboard
Dashboard OwnCA · demo env
Authorities
5
Active
186
Revoked
11
Expired
3
OwnCA Root GOST root gost-256 2034-08-12
OwnCA Issuing G1 int. gost-256 2029-08-12
OwnCA Root RSA root rsa-4096 2034-08-12
OwnCA Issuing R1 int. rsa-4096 2029-08-12
OwnCA Lab GOST root gost-512 2031-02-04
SERIAL · 4C:E8:13:7A:6F:09:21:88 OID 1.2.643.7.1.1.1.1 · id-tc26-gost3410-12-256 OID 1.2.643.7.1.1.5.2 · id-tc26-hmac-gost3411-12-512 RFC 9337 · PBES2 over Kuznyechik-CTR-ACPKM RFC 9548 · HMAC-Streebog-512 MAC CRL · last issued 2026-05-26 04:00:00 UTC cipher · GOST2012-KUZNYECHIK-KUZNYECHIKOMAC SERIAL · 4C:E8:13:7A:6F:09:21:88 OID 1.2.643.7.1.1.1.1 · id-tc26-gost3410-12-256
// what's inside

Everything your EasyRSA wrapper does — without the shell scripts.

ISSUANCE

Unified Cert Issue form

One form replaces the build-server-full / build-client-full / sign-req incantations: pick a CA, optionally a profile, fill the Subject DN and SANs. Bring your own CSR or have the panel generate the key. GOST paramset selection only appears when GOST is enabled.

EXPORT

Standard PFX, GOST optional

Stock .p12 (PBES2 / AES / SHA-256) works on any vanilla OpenSSL — the same bundle easyrsa export-p12 would hand you. The optional .gost.p12 (RFC 9337 + 9548, read by CryptoPro) is the only piece that wants a patched gost-engine; turn GOST off and you never touch it.

PROFILES

10 ready-made profiles

server, client, server_client, vpn, user, user_login, smartcard_logon, smime_sign, code_signing, timestamping — all with KU/EKU and OID-field bindings you can edit or clone.

AUTHORITIES

Roots & intermediates

The init-pki / build-ca step, made clickable: spin up root and intermediate CAs with any supported key family. Each CA carries its own distribution points — CRL, AIA, OCSP, SIA, freshestCRL, issuerAltName — embedded in every leaf it signs.

NGINX TLS

Plain TLS, GOST on demand

The bundled nginx serves the regular RSA/ECDHE suites out of the box. Enable GOST and it also terminates GOST2012-KUZNYECHIK-KUZNYECHIKOMAC on the same socket; leave it off and it's an ordinary TLS endpoint on stock OpenSSL.

OPS

State lives in files

CA material, issued certs and CRLs are flat files under OWNCA_STORAGE_DIR/. Postgres is only the metadata index — you can tar the storage dir and move a CA between hosts.

// supported algorithms

Standard crypto by default, GOST when you opt in

RSA 2048 / 4096
PKCS #1 v2.2 · PSS & PKCS1-v1_5
Standard
ECDSA P-256 / P-384
FIPS 186-4 · X9.62
Standard
Ed25519
RFC 8410 · EdDSA
Standard
GOST R 34.10-2012 / 256
RFC 7836 · TC26 paramsets A / B / C / D
GOST
GOST R 34.10-2012 / 512
RFC 7836 · TC26 paramsets A / B / C
GOST
Streebog-256 / 512
RFC 6986 · GOST R 34.11-2012
GOST
Kuznyechik-CTR-ACPKM
RFC 8645 · used by PFX export
GOST
Magma-CTR-ACPKM
RFC 8645 · also offered as PBES2 cipher
GOST
// click around

Tour the demo — every screen is a real, navigable page.

The pages below are the actual dashboard templates, rendered with hand-crafted mock data. Sidebar, panels, tables, lang switch — all live. Forms are intercepted (this is a static mirror), but every link goes somewhere.

// run it in 90 seconds

Two compose files. Pick your poison.

dev_env mounts the source into the dashboard container with auto-reload — good for hacking on the panel. demo ships prebuilt images and can be sneakernet'd onto an air-gapped host as a single tarball.

$ bash~/ownca/demo
# clone $ git clone https://github.com/ilya-maltsev/ownca.git $ cd ownca/demo # build CA + dashboard + nginx images $ ./build-images.sh # bring up the stack (admin/admin) $ docker compose up -d # open the panel $ xdg-open https://localhost:8443