Gegenbuch: Fingerabdruck-Pin verpflichtend und vollstaendig angewandt (R177)
R177-01 (MEDIUM): Der Pin war optional. Ohne ihn war der Vertrauensanker die gesamte allowed_signers-Menge, nicht der eine Notar-Schluessel: ein zweiter dort gelisteter Schluessel konnte das Gegenbuch waschen und force-pushen, und %G? war G. R176-01 hatte "jeder selbst erzeugte Schluessel" geschlossen, "jeder erlaubte Schluessel" blieb offen. Fix: Pin wird aus user.signingkey abgeleitet; laesst er sich nicht bestimmen, wird abgebrochen statt die ganze Liste zu akzeptieren. R177-02 (MEDIUM): Der Schreib-Lauf prueft den frischen Commit nur auf %G?, nicht auf den Pin. Ein Notar-Host mit falsch konfiguriertem Schluessel meldete "beglaubigt" und pushte - und ab da war die Kette dauerhaft rot, behebbar nur per Force-Push, den die Branch-Protection gerade verhindern soll. Fix: Pin-Abgleich am frischen Commit vor dem Push, bei Abweichung Ruecknahme. Kleinkram: NOTARY_ALLOW_LOCAL faerbt Erfolgsmeldungen ein und pusht nicht mehr ins Leere; CRM-Fehler liefern eine erklaerende Zeile statt Node-Stacktrace. Verifiziert mit drei SSH-Schluesseln gegen echten Remote: keyC-Angriff -> Alarm exit 2 auch ohne gesetzten Pin; Schreiblauf mit falschem Schluessel -> zurueckgerollt, nichts gepusht; CRM nicht erreichbar/401 -> saubere Meldung; Lokalmodus eingefaerbt; saubere Historie ohne Fehlalarm. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -71,9 +71,22 @@ Deshalb gilt jetzt:
|
||||
- **Ein Remote muss erreichbar sein.** Ist er es nicht, bricht das Skript mit
|
||||
Code 3 ab, statt dem lokalen Stand zu glauben. Ein Gegenbuch, dessen
|
||||
beglaubigter Stand sich nicht feststellen lässt, gibt kein grünes Licht.
|
||||
- Optional, aber empfohlen: `NOTARY_SIGNER_FINGERPRINT` auf den Fingerabdruck
|
||||
des Notar-Schlüssels setzen (`git log -1 --format=%GF`). Dann muss jeder
|
||||
Commit von genau diesem Schlüssel stammen.
|
||||
- **Genau ein Schlüssel zählt, nicht die ganze Liste.** `allowed_signers` kann
|
||||
mehrere Principals enthalten – ein Kollege, ein Alt-Schlüssel, eine global
|
||||
geteilte Datei. Jeder davon würde sonst als „gültig" durchgehen und könnte
|
||||
das Gegenbuch umschreiben. Deshalb prüft das Skript zusätzlich den
|
||||
**Fingerabdruck** des Signierschlüssels.
|
||||
|
||||
Er wird automatisch aus `user.signingkey` abgeleitet. Lässt er sich nicht
|
||||
bestimmen, bricht das Skript ab – statt stillschweigend die ganze Liste zu
|
||||
akzeptieren. Explizit setzen geht auch:
|
||||
|
||||
```bash
|
||||
export NOTARY_SIGNER_FINGERPRINT=$(git log -1 --format=%GF)
|
||||
```
|
||||
|
||||
Wichtig: exakt der `%GF`-Wert (`SHA256:…`), nicht die vollständige Ausgabe
|
||||
von `ssh-keygen -lf`.
|
||||
|
||||
## Rückgabecodes
|
||||
|
||||
|
||||
Reference in New Issue
Block a user