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. 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 — 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
  • Cisco ASA — REST API / expect skript