Kunden-Lebenszyklus (Offline-Aktivierung, Self-Service)
Dieses Dokument beschreibt ausschließlich den kundenseitigen Lebenszyklus: Installation der Binärdatei, Self-Service-Deklaration von Maschinen, Kontingente, Laufzeitprüfung und Wechsel zwischen mehreren Lizenzen.
Wichtiger Hinweis: Die SCA-Binärdatei macht NIEMALS einen HTTP-Aufruf. Jede Kommunikation Server ↔ Client läuft über E-Mail + Nutzeraktionen im Webportal (
www.codefixture.com).
Chronologische Übersicht (3 Phasen, in dieser Reihenfolge)
Phase A — Erstinstallation (einmal pro Kunde)
- Angebot, dann Rechnungsstellung — das Preismodell wird auf Anfrage mitgeteilt (
how-we-price.php), kein Online-Selbstbedienungs-Checkout. - Aktivierungs-E-Mail, gesendet sobald das Kundenkonto angelegt ist, zum Festlegen des Portal-Passworts (signierter Link, 2 Stunden gültig). Eine zweite E-Mail „Paket bereit" folgt, sobald der Betreiber eine Binärdatei geliefert hat.
- Anmeldung auf
www.codefixture.com/login.php: E-Mail + Passwort, danach ein 6-stelliger Anmeldecode per E-Mail, eingegeben aufotp.php(systematische Zwei-Faktor-Authentifizierung bei jeder Anmeldung).
Phase B — Für JEDE genutzte Plattform (Linux, macOS, Windows…)
- Auf
/downloads.phpin der Zeile der gewünschten Plattform auf Herunterladen klicken. Man erhält eine Datei:sca-<version>-<platform>-<id>.tar.gz(Linux)sca-<version>-<platform>-<id>.dmg(macOS)sca-<version>-<platform>-<id>.zip(Windows)
- SHA-256 prüfen (empfohlen):
→ mit dem auf
shasum -a 256 sca-1.0.0-linux-x86_64-acme.tar.gz # macOS / Linux certutil -hashfile sca-1.0.0-win-x86_64-acme.zip SHA256 # Windows/downloads.phpangezeigten Wert vergleichen. - Paket entpacken. Inhalt:
staticcodeaudit-<platform>(die ausführbare Binärdatei)README.txt(Offline-Aktivierungsverfahren)NOTICE.txt(Lizenzhinweise + Erinnerung an das Offline-Prinzip)

Phase C — Für JEDE zu aktivierende Maschine (bis zu max_machines, Self-Service)
- Maschinen-Fingerabdruck berechnen (SHA-256, 64 Hex-Zeichen, abgeleitet aus Hostname + Architektur + Betriebssystem + MAC, ohne Netzwerkaufruf) — zwei gleichwertige Wege:
- Ohne installierte Binärdatei: Auf
www.codefixture.com/activate.phpbieten ein Linux/macOS-Tab und ein Windows-Tab je einen Einzeiler (Python 3 oder PowerShell) zum Einfügen in ein Terminal, mit Kopieren-Button. - Binärdatei bereits installiert:
./staticcodeaudit-<platform> activatezeigt denselben Fingerabdruck direkt im Terminal an (oder die SCA-Fußzeile bei einem Scan auf einer noch nicht aktivierten Maschine).
- Ohne installierte Binärdatei: Auf

- Diesen Fingerabdruck kopieren (USB-Stick, Telefon, Copy-Paste) auf ein mit dem Internet verbundenes Gerät — kann dasselbe Gerät sein, das zur Berechnung verwendet wurde.
- Auf diesem verbundenen Gerät zu
www.codefixture.com/activate.phpgehen (Anmeldung erforderlich). Alle Lizenzen des Kunden werden automatisch aufgelistet — keine erneute Eingabe der Seriennummer nötig. Für die betreffende Lizenz:- Plattform auswählen (Dropdown)
- Maschinen-Fingerabdruck einfügen
- Optionale Bezeichnung angeben (z. B. „MacBook Büro")
- Auf + Hinzufügen klicken

- Die Website aktualisiert
license.keysofort serverseitig (neuer Fingerabdruck zur signierten Liste hinzugefügt). Diese Datei über die entsprechende Schaltfläche auf der Lizenzkarte herunterladen — jederzeit verfügbar, nicht nur direkt nach dem Hinzufügen. - Die
license.keyauf die Zielmaschine übertragen (USB-Stick / scp / AirDrop) und im selben Ordner wie die Binärdatei ablegen. - SCA erneut starten:
→ SCA:
./staticcodeaudit-linux-x86_64 scan ~/mein-projekt- liest die lokale
license.key - prüft die HMAC-HKDF-Signatur (eingebetteter öffentlicher Schlüssel — null Netzwerkaufrufe)
- prüft, ob der lokale Fingerabdruck ∈ der signierten Liste ist
- prüft
expires_at > today - startet den Scan
- Fußzeile am Ende:
Status: OK (Maschine aktiviert)
- liest die lokale
Self-Service-Kontingente (2 unterschiedliche Dimensionen)
Jede Lizenz hat zwei unabhängige Kontingente, konfigurierbar je nach Preistarif (Tier):
| Kontingent | Was es begrenzt | Rücksetzung |
|---|---|---|
Plätze (max_machines) |
Anzahl gleichzeitig deklarierter Maschinen auf der Lizenz | Nie — ein Entfernen gibt sofort einen Platz frei |
Hinzufügefrequenz (max_machine_changes_per_year) |
Anzahl der Hinzufügungen von Maschinen in einem gleitenden 365-Tage-Fenster | Gleitend — eine über ein Jahr alte Hinzufügung fällt automatisch aus der Zählung |
Angezeigt auf /activate.php, pro Lizenz: „X / Y Maschine(n) deklariert · Z Hinzufügung(en) übrig in den letzten 12 Monaten".
Nur Hinzufügungen verbrauchen das Frequenzkontingent — ein Entfernen (Button „✕ Entfernen") ist immer möglich, ohne Limit: Es gibt einen Platz frei, ohne jemals zusätzliche Hardware hinzuzufügen — auf dieser Seite gibt es also nichts zu begrenzen. Das Entfernen löst sofort eine Neusignierung der license.key aus (Fingerabdruck aus der Liste entfernt): Die Binärdatei stoppt auf diesem Gerät bei ihrer nächsten Prüfung (kein sofortiger Stopp — es gibt keinen Netzwerkaufruf, der ihn früher auslösen könnte).
Das Umbenennen der Bezeichnung einer Maschine (notes) gilt nie als Änderung — immer möglich, selbst bei ausgeschöpftem Hinzufügekontingent.
Mögliche Fehlermeldungen (Self-Service)
| Situation | Angezeigte Meldung |
|---|---|
| Dieser Fingerabdruck ist bereits für diese Lizenz deklariert | Diese Maschine ist bereits für diese Lizenz deklariert. |
Platzkontingent (max_machines) erreicht |
Maschinenkontingent für diese Lizenz erreicht. |
| Hinzufügekontingent (365-Tage-Fenster) erreicht | Kontingent für Maschinen-Hinzufügungen in den letzten 12 Monaten erreicht. |
| Lizenz nicht aktiv (suspendiert, abgelaufen, widerrufen) | Diese Lizenz ist nicht aktiv: Maschinendeklaration nicht möglich. |
1 Laufzeitprüfung (ohne Internet)
Bei jeder Ausführung auf einer bereits aktivierten Maschine prüft SCA:
- liest die lokale license.key von der Festplatte
- prüft die HMAC-HKDF-Signatur (Integrität + Fälschungssicherheit — öffentlicher Schlüssel in der Binärdatei eingebettet)
- prüft, ob der lokale Fingerabdruck ∈ fingerprints des Payloads ist
- prüft expires_at > today
- kein Netzwerkaufruf, kein Ping, keine Telemetrie.
Konsequenz: Ein Entfernen einer Maschine oder ein administrativer Widerruf wird erst bei der nächsten Prüfung der betroffenen Binärdatei wirksam (ein erneuter Download der license.key verbreitet ein Entfernen sofort; für einen vollständigen Lizenzwiderruf muss der Nutzer eine neue license.key herunterladen, die seinen Fingerabdruck nicht mehr enthält oder ein näheres expires_at hat).
2 Mehrere Lizenzen auf einer Maschine — SCA_LICENSE_PATH
Hat ein Kunde 2 unterschiedliche Lizenzen (z. B. persönliches Solo Plus + Team-Lizenz — seltener Fall), kann er ohne Dateien zu verschieben zwischen ihnen wechseln:
SCA_LICENSE_PATH=~/lizenzen/team.key ./sca scan ~/arbeitsprojekt
SCA_LICENSE_PATH=~/lizenzen/solo-plus.key ./sca scan ~/privatprojekt
Prioritätsreihenfolge von SCA zum Auffinden seiner license.key:
$SCA_LICENSE_KEY(roher JSON-Inhalt, von einem Wrapper gesetzt)$SCA_LICENSE_PATH(Pfad zu einer .key-Datei — empfohlen zum Wechseln zwischen Lizenzen)./license.key(cwd, Standardkonvention)
3 Sonderfälle auf Kundenseite
| Fall | Vorgehen |
|---|---|
| N-te Maschine hinzufügen | Phase C (Schritte 7→12) auf der neuen Maschine wiederholen. Verbraucht 1 Hinzufügung des Frequenzkontingents (sofern Plätze max_machines verfügbar sind). |
| Neuinstallation des Betriebssystems auf derselben Maschine | Der Fingerabdruck ändert sich → Phase C wiederholen (neue Hinzufügung). Ist das Platzkontingent erreicht, zuerst den alten Fingerabdruck über /activate.php entfernen (kostenlos, ohne Limit). |
| Gerätewechsel | Das alte Gerät über /activate.php entfernen → Phase C auf dem neuen wiederholen (1 Hinzufügung verbraucht). |
| Verlorene/gestohlene Maschine | Über /activate.php entfernen — wirksam bei der nächsten Prüfung dieser Binärdatei. |
license.key-Datei verloren |
Jederzeit über /activate.php erneut herunterladen (eigene Schaltfläche pro Lizenz) — Phase C muss nicht wiederholt werden, der Fingerabdruck ist bereits deklariert. |
| Jährliche Verlängerung | Der Kunde wiederholt Schritt 4 (neues Paket herunterladen) + Schritt 11 (neue license.key übertragen) auf jeder Maschine, falls sich die Version geändert hat. |