Files
DDI/docs/LICENSING.md
T
beug.k@beugsiud.deandClaude Opus 5.5 42aee163f3 feat(tools): keygen-setup script and licensing guide
Creates the product and the standard policy in Keygen (one server per
license, license-key activation, daily heartbeat), issues licenses with
limits in metadata and writes offline license files. The admin token is
only read from the environment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:36:16 +02:00

4.7 KiB
Raw Blame History

Lizenzierung

Nur der Management-Server braucht eine Lizenz. Agents, DNS und DHCP laufen immer unverändert weiter, auch ohne Lizenz, mit abgelaufener Lizenz oder ohne Verbindung zum Lizenzserver. Die Entscheidungen dazu stehen in ADR 0016.

Überblick

Zustand Bedeutung Verwaltung
Testphase (trial) 30 Tage ab Erststart, solange nie eine Lizenz aktiv war voll nutzbar
Gültig (valid) Lizenz online geprüft oder gültige Offline-Lizenzdatei voll nutzbar
Karenzzeit (grace) Lizenzserver nicht erreichbar, Lizenz gesperrt oder abgelaufen; Standard 14 Tage ab der letzten erfolgreichen Prüfung voll nutzbar, Hinweis in der Oberfläche
Schreibgeschützt (read_only) Testphase oder Karenzzeit vorbei, Offline-Datei abgelaufen ansehen und exportieren ja, Änderungen nein

Die Oberfläche zeigt den Zustand als Banner und auf der Seite Lizenz mit Ablaufdatum, Limits, Nutzung und Funktionen.

Lizenzserver: Keygen

Lizenzanbieter ist ein selbst gehostetes Keygen (Community Edition) unter https://license.beugsiud.de. Account-ID und öffentlicher Schlüssel des Accounts werden beim Build fest in den Server eingebaut (Makefile: KEYGEN_ACCOUNT_ID, KEYGEN_PUBLIC_KEY). Konfigurierbar bleiben:

Variable Bedeutung Standard
KEYGEN_URL Adresse des Lizenzservers https://license.beugsiud.de
KEYGEN_PRODUCT_ID Produkt, auf das Lizenzen geprüft werden – (von keygen-setup.sh setup ausgegeben)
DDI_LICENSE_GRACE_PERIOD Karenzzeit 14d

Jede Antwort des Lizenzservers wird mit dem eingebauten Schlüssel auf ihre Signatur geprüft. Gefälschte oder wiederholt eingespielte Antworten werden verworfen und wie „nicht erreichbar“ behandelt.

Einmalige Einrichtung in Keygen

Voraussetzungen: bash, curl, jq und ein Admin-Token des Keygen-Accounts. Das Token wird nur als Umgebungsvariable übergeben und nirgends gespeichert. Es gehört nicht ins Repository.

export KEYGEN_ADMIN_TOKEN='…'          # nicht in die Shell-History: z. B. read -rs KEYGEN_ADMIN_TOKEN
tools/keygen-setup/keygen-setup.sh setup

Das Skript legt an (und verwendet beim erneuten Aufruf wieder):

  • Produkt ddi-management-server
  • Policy ddi-server-standard:
    • genau ein Server pro Lizenz (maxMachines: 1, strict)
    • Aktivierung mit dem Lizenzschlüssel (authenticationStrategy: LICENSE)
    • täglicher Heartbeat; ein Server, der sich einen Tag nicht meldet, wird freigegeben und beim nächsten Kontakt automatisch neu aktiviert
    • Laufzeit ein Jahr
    • Standardlimits in den Metadaten: maxAgents: 10, maxAddresses: 5000

Die ausgegebene Produkt-ID wird beim Server als KEYGEN_PRODUCT_ID eingetragen.

Lizenz ausstellen

tools/keygen-setup/keygen-setup.sh create-license --name "Kunde GmbH" --max-agents 20 --max-addresses 20000

Ausgegeben werden Lizenz-ID und Lizenzschlüssel. Limits pro Lizenz stehen in deren Metadaten (maxAgents, maxAddresses); Feature-Freischaltungen erfolgen über Keygen-Entitlements.

Der Administrator trägt den Schlüssel in der Oberfläche unter Lizenz → Lizenzschlüssel eintragen ein. Der Server prüft ihn, aktiviert sich selbst als Maschine (Fingerprint aus der Machine-ID, nicht die Machine-ID selbst) und meldet sich danach regelmäßig.

Ein Schlüssel ist an genau einen Server gebunden. Für einen Umzug entfernt man die Lizenz auf dem alten Server (Lizenz entfernen gibt die Maschine frei) oder wartet, bis Keygen den alten Server nach einem Tag ohne Heartbeat freigibt.

Isolierte Netze: Offline-Lizenzdatei

Hat der Server keine Verbindung zum Lizenzserver, erzeugt man eine Lizenzdatei:

tools/keygen-setup/keygen-setup.sh checkout --license <LIZENZ-ID> --ttl 31536000 --out kunde.lic

Mit --encrypt wird die Datei zusätzlich mit dem Lizenzschlüssel verschlüsselt; dann muss beim Import auch der Schlüssel angegeben werden. Der Import erfolgt in der Oberfläche unter Lizenz → Offline-Lizenzdatei importieren. Die Datei ist bis zu ihrem eigenen Ablauf (--ttl) bzw. bis zum Ablauf der Lizenz gültig; eine Karenzzeit gibt es dabei nicht.

Weitere Befehle

tools/keygen-setup/keygen-setup.sh list    # Lizenzen des Produkts

Sperren, Verlängern und Löschen von Lizenzen erfolgen über die Keygen-API bzw. die Keygen-Werkzeuge.

Grenzen

Eine Lizenzprüfung in selbst gehosteter Software ist ein Soft-Control: Wer das Server-Binary verändert, kann sie umgehen. Die eingebauten Schlüssel, die signierten Antworten und der Maschinen-Fingerprint verhindern nur das bequeme Umgehen per Konfiguration oder Netzwerk. Dies wird auch in docs/SECURITY.md beschrieben.