Projekt

CertHub

Centrální server pro správu a distribuci TLS certifikátů — vydávání přes ACME, token-based pull distribuce s IP omezením a automatická obnova certifikátů přes systemd timer.

Django 6 Python HTMX MariaDB uacme Bootstrap 5

O projektu

CertHub vznikl jako náhrada za ruční správu TLS certifikátů roztroušených po desítkách serverů a síťových zařízení v organizaci. Místo individuálního prodlužování na každém stroji se veškerá logika vydávání a obnovy certifikátů soustřeďuje na jednom místě. Certifikáty jsou vydávány přes ACME protokol (u certifikační autority, kde není potřeba DNS/HTTP challenge, domény jsou předregistrovány v portálu).

Distribuce funguje na pull principu: každý server nebo zařízení dostane unikátní token URL a stahuje si certifikát sám v pravidelném intervalu. Pro zařízení, která pull neumožňují (Cisco ASA, Fortigate, IronPort), je připraven push model přes REST API, případně SSH CLI. Token lze omezit na konkrétní IP adresy nebo CIDR rozsahy, takže k soukromému klíči má přístup pouze oprávněný stroj.

Klientský skript nejprve porovná SHA-256 fingerprint lokálního certifikátu s fingerprintem na CertHub serveru. Reload služby (Apache, nginx, postfix…) proběhne jen tehdy, pokud se certifikát skutečně změnil — zbytečné výpadky jsou tím eliminovány.

Životní cyklus certifikátu

Registrace domény Vydání (ACME) Distribuce tokenem Klient stáhne Automatická obnova

Klíčové funkce

ACME

Každá doména má vlastní ACME účet s dedikovanými EAB credentials.

Pull distribuce s tokeny

Každý server dostane unikátní UUID token. Endpoint /dl/{token}/{soubor} vrátí cert.pem, privkey.pem, cert.pfx nebo fingerprint.

IP omezení přístupu

Ke každému tokenu lze přiřadit seznam povolených IP adres nebo CIDR rozsahů. Požadavek z nepovolené adresy dostane 403 — privátní klíč se nedostane ke třetí straně.

ETag a smart refresh

Server vrací SHA-256 fingerprint certifikátu jako ETag. Klient porovná fingerprint před restartem služby — reload proběhne jen při skutečné změně, 304 Not Modified jinak.

Více formátů certifikátu

Linux a Synology stahují PEM soubory, Windows servery dostávají zaheslovaný PKCS#12 (PFX) generovaný on-the-fly. Heslo k PFX je uloženo šifrovaně u tokenu.

Push pro síťová zařízení

Zařízení bez HTTP klienta (Cisco ASA, Fortigate, IronPort) jsou obsluhována push modelem přes REST API nebo SSH CLI — CertHub sám nahraje nový certifikát po obnově.

Technický stack
  • Django 6.0 / Python 3.x
  • MariaDB (UTF8MB4)
  • HTMX — partial page updates
  • Bootstrap 5 + crispy-forms
  • uacme — ACME klient
  • systemd timer — automatická obnova
  • Apache / nginx
Klientské skripty
  • Linux — bash + curl + ETag + fingerprint
  • Windows — PowerShell + thumbprint
  • Synology DSM — curl v Task Scheduler
  • Fortigate — REST API
  • IronPort — SSH CLI