TLS-Gate v2: Passkanten als PrĂŒffall â und Monitoring-Resonanz statt statischer Liste
Von: Branko â OZMAI
Stand: 28. September 2026
Typ: EXTERNAL_SOURCE (Inbox-Regel §3 â keine automatische Geltung, kein Brain-Status)
Charakter: STATUS + realer PrĂŒffall fĂŒr IDENTITAETSBINDUNG_HMAC_NETBOX_TLS_CUSTODY_PRUEFFALL_v0.1.md
+ DESIGN_INTENT (Monitoring â Postgres/Vektor). Kein Auftrag, kein Deploy.
Quelle: Repo TLS-Gate-Mock-Pipeline (git.crumbforest.org), Tags v2.0.0 (9849166) und
v2.1.0 (28f2211), dort CHANGELOG.md, docs/AUDIT.md (BWA-AUD-16âŠ23), docs/STRUKTUR.md, deploy/.
Anschluss an: 2026-09-24_TLS-GATE-MANDANTEN-CORE-UND-LOGIN_BRANKO.md (letzter Stand dort: 911f1e5).
Legende: â real/gebaut · đ§Ș gebaut, getestet, nicht live · đ spezifiziert · ⏠OPEN · â UNKNOWN
Zugangsdaten, Kunden-Domains, Reseller-IDs und Inhalte der vertraulichen Anbieter-Doku stehen bewusst
nicht hier.
Der Bogen in einem Satz
Seit dem 24.9. ist aus dem Mockup mit Login eine v2 geworden. Die Struktur schĂŒtzt jetzt, nicht mehr
eine Deny-Liste, und neue Module kosten keinen Overhead pro Funktion. Dabei ist sichtbar geworden, dass
TLS-Gate schon heute an mehreren Passkanten genau die Trennung hĂ€lt, die der whoami-PrĂŒffall
verlangt: geprĂŒftes PrĂ€dikat â stĂ€rkere Bindung. Heute ist das alles aber statisch. Die nĂ€chste
Frage ist, was passiert, wenn Monitoring und Clients regelmĂ€Ăig âfunkenâ.
Was seit dem 24.9. real ist
| Stand | Was | Beleg |
|---|---|---|
| đ§Ș | v1.0.0 getaggt = Werkzeug ohne Login (Stand der Test-VM) |
Tag auf 3dec8a8 |
| đ§Ș | v2.0.0: Login/TOTP/Rollen/Audit (M1), Web-Benutzerverwaltung, Audit-Ansicht, Pflicht-âwarumâ bei Bestellungen |
Tag 9849166, tests/test_auth.sh |
| đ§Ș | PSR-4-Struktur: nur public/ ist Webroot, Klassen TlsGate\⊠unter src/, CLIs unter bin/ |
docs/STRUKTUR.md; Test mit Gegenprobe: das Alt-Layout liefert die SQLite aus, das neue nicht |
| đ§Ș | v2.1.0: SSL-Konsole in Controller + Templates + Assets zerlegt (index.php 1054 â 37 Zeilen), strikte CSP ohne Inline-Skript |
Tag 28f2211; HTML-Vergleich alt/neu fĂŒr GET + 7 Aktionen identisch; BWA-AUD-23 |
| đ§Ș | Tests: test_auth.sh 71/71, test_totp_rfc6238.sh 11/11 (RFC-Vektoren), test_smoke.sh 44/44 |
frischer Klon von 28f2211, lokal PHP 8.5 |
| đ | Deploy-Vorlagen Apache + nginx, Tabelle je OS (Debian/RHEL/Alpine/FreeBSD), FPM-Pool, SELinux | deploy/, nicht gegen echten Webserver geprĂŒft (nginx -t/apachectl -t offen) |
| ⏠| acme.sh-Modul (fĂŒr Wald/Nullfeld spielt Let's Encrypt die erste Rolle) | ARCHITEKTUR M6, noch kein Code |
| ⏠| Monitoring-Anbindung, Postgres, Vektor | siehe unten, reines DESIGN_INTENT |
Zwei Fehler, die unterwegs gefunden wurden. Beide sind fĂŒr andere Repos im Wald lehrreich:
.gitignore-MusterSSL/traf auf macOS auchtemplates/ssl/(core.ignorecase=true). 18 Dateien
wurden still nicht committet, gefunden erst ĂŒbergit statusund einen frischen Klon. Fix: Muster am Root
verankern (/SSL/,/state/). Das ist derselbe Fehlertyp wieaudit.phpĂŒberschreibtAudit.phpvom 26.9.:
ein Name bindet stĂ€rker, als er soll.- Flackernder Replay-Test seit v2.0.0: Der Test rechnete den âbereits benutztenâ TOTP-Code neu aus, statt
ihn wiederzuverwenden. Ăber eine 30-s-Grenze war das ein frischer gĂŒltiger Code, und der Test wurde rot.
Reproduziert per Start an Sekunde 22 des Fensters: alt 2/2 rot, neu 3/3 grĂŒn. Der Test prĂŒfte also ein
anderes PrĂ€dikat als das, das er zu prĂŒfen behauptete.
PrĂŒffall: TLS-Gate-Passkanten gegen IDENTITAETSBINDUNG ⊠§16
Das ist Angriffsmaterial fĂŒr die Hypothese, keine BestĂ€tigung. Pro Passkante: welches PrĂ€dikat die
Evidenz tatsÀchlich trÀgt und welche stÀrkere Bindung daraus nicht folgt.
| Passkante (Code) | geprĂŒftes PrĂ€dikat | folgt ausdrĂŒcklich nicht |
|---|---|---|
audit_log ssl.orderCert requested |
Ein Konto mit Rolle ℠user hat die Aktion ausgelöst, mit Grund. |
Die CA hat ausgestellt. (Admission â Wirkung, deshalb heiĂt der Eintrag requested, nicht ok.) |
dashboard.sh deploy: keyMatch / chainVerified |
Cert passt zu Key, die Chain validiert gegen das Bundle. | Der Server liefert dieses Cert aus. DafĂŒr gibt es separat cross-check gegen domain:443 (erwartete â beobachtete Wirkung). |
| TOTP-Login | Jemand konnte mit dem Secret den Code erzeugen (â KEY_USE_CAPABILITY). |
Das war die Person hinter dem Konto. |
source: mock vs. soap |
Woher die angezeigten Daten stammen. | Mock-Daten wÀren Live-Daten. |
| ACME DNS-01 (kĂŒnftig) | Kontrolle ĂŒber die DNS-Zone zum Zeitpunkt t. | IdentitĂ€t der Maschine; Geltung ĂŒber t hinaus. |
Zwei Stellen, an denen die Trennung heute nicht hÀlt (Befund, kein Lob):
- TOTP-SchlĂŒssel liegt neben der DB (BWA-AUD-22, offen). Die sodium-VerschlĂŒsselung trĂ€gt nur das
PrĂ€dikat âein DB-Dump allein gibt die Secrets nicht herâ. Wer das Verzeichnis liest, hat beides. Das
ist wörtlich F5 bzw.KEY_USE_CAPABILITY â KEY_MATERIAL_ACCESS. Erstdeploy/mit getrenntem
/etc/tlsgate/tlsgate.keylöst das, und das ist noch nicht live. - SELinux ohne
httpd_can_network_connect(RHEL-Familie): Der SOAP-Aufruf scheitert still, die App
fĂ€llt auf den Mock zurĂŒck. Nur ein kleines Label âMock-Fallbackâ verhindert, dass man die Daten fĂŒr
Live-Daten hÀlt. Das ist eine stille Aufwertung, die durch eine Umgebungsgrenze entsteht, nicht im Code.
Monitoring-Resonanz statt statischer Liste (DESIGN_INTENT)
Heute (statisch, â
): Die Liste kommt auf Anfrage (Web/CLI) aus sslListExtended bzw. dem Mock. Es gibt
state/state.json + state/actions.log (Terminal-Aktionen) und audit_log (wer hat was ausgelöst).
Nichts meldet sich von selbst.
Produktion (Ist in anderen Wald-Teilen): Icinga, Checkmk und allgemein Monitoring funken regelmĂ€Ăig.
Clients melden sich selbst (âResonanzâ). Zielbild: Postgres mit Vektor (pgvector), irgendwann, im Rust-Core.
Unterscheidungen, die dafĂŒr tragen mĂŒssen, als Vorschlag:
- Ein Monitoring-Check ist eine neue Feststellung mit eigenem Anker: Checker, Check-Definition,
Zeitpunkt, Ziel. Beispiel: âChecker C hat um t aufhost:443ein Cert gesehen, gĂŒltig bis X.â Das trĂ€gt
Freshness fĂŒr diesen Moment, nicht mehr. - Wiederholung â Korroboration (
PRUEFUNG_FESTSTELLUNG§7): 288 grĂŒne Checks am Tag sind nicht 288-mal
so viel Evidenz. AussagekrĂ€ftig sind die Zustandswechsel (grĂŒn â rot, anderes Cert, andere CA). Die
Job-Queue/Cron aus ARCHITEKTUR M4 sollte deshalb ĂbergĂ€nge protokollieren, nicht DurchlĂ€ufe zĂ€hlen. - Selbstmeldung â AuĂenbeobachtung: Ein Client, der âmein Cert ist gĂŒltigâ funkt, liefert eine
Behauptung aus der Innensicht. Der TLS-Gate-cross-checkist die AuĂensicht auf dieselbe Kante. Beide
widersprechen sich nicht automatisch (Relais-Test,PRUEFUNG_FESTSTELLUNG§8). Nur mit benannter
gemeinsamer Grundlage lĂ€sst sich daraus ein Widerspruch oder eine Korroboration machen. - Resonanz â Geltung (eigene Messung im 768-Raum,
RESONANZ_UNGLEICH_GELTUNG_v0.1.md): Wenn
Monitoring-Ereignisse als Vektoren landen, ist âĂ€hnliches Ereignis gefundenâ ein Candidate, keine
zulĂ€ssige Grundlage fĂŒr eine Entscheidung wie âverlĂ€ngernâ oder âauslaufen lassenâ. - Vorschlag zur Datentrennung: Beobachtungen (Monitoring/Resonanz) in eine eigene Tabelle, nicht in
audit_log.audit_logbeantwortet âwer hat was ausgelöstâ (Berechtigung). Beobachtungen beantworten
âwas wurde wann von wem gesehenâ (Evidenz). Die Vektorspalte gehört zu den Beobachtungen und macht sie
auffindbar, nicht wahrer. Die Nahtstelle zum Rust-Core bleibt die DB (jobs,cert_inventory,
audit_log+ Beobachtungen).
Offene Fragen an OZMAI (OPEN)
- Reicht der bestehende
VerificationAttempt(target, predicate, mechanism, policy, evidence_refs,
assumption_refs, verifier, causal_anchor, resource_limit), um einen Monitoring-Check abzubilden, oder
fehlt etwas fĂŒr âperiodisch, gleiche Definition, wechselndes Ergebnisâ? - Ist âZustandswechsel statt ZĂ€hlungâ fĂŒr Monitoring schon durch §7 (Wiederholung â BestĂ€tigung) gedeckt,
oder ist das ein eigener PrĂŒfvertrag? - Gehört die Client-Selbstmeldung in denselben Bestand wie die AuĂenbeobachtung (mit Herkunftsmarke), oder
muss sie getrennt bleiben? - Wo liegt die ZulĂ€ssigkeitsprĂŒfung, wenn Vektor-Treffer ĂŒber Monitoring-Ereignisse eine Entscheidung
vorbereiten? Nach der Resonanz-Messung vermutlich an der Generierungs-/Passkante, nicht im Score.
Kurz: v2 steht, getaggt und getestet. Die Struktur trÀgt neue Module ohne Overhead. TLS-Gate hÀlt an
mehreren Kanten schon âPrĂ€dikat â stĂ€rkere Bindungâ, an zwei Kanten nachweislich nicht. Und wenn aus
statisch âfunkt regelmĂ€Ăigâ wird, zĂ€hlen ĂbergĂ€nge und nicht Wiederholungen, und Resonanz bleibt ein
Candidate.