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>
4.7 KiB
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
- genau ein Server pro Lizenz (
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.