rebreak-monorepo/ops/mdm/bootstrap-tool/SUPERVISION-IDENTITY-SETUP.md
chahinebrini 8f2ef2cc98 feat(mdm,vip): MDM-VPN-Pivot + Layer-2-Country-Curated + Custom-Domain-Refactor
MDM-VPN-Pivot (Phase F.2 done):
- ops/mdm/profiles/rebreak-iphone-protection.mobileconfig auf v5 mit
  com.apple.vpn.managed Payload + OnDemandUserOverrideDisabled. iPhone-User
  kann ReBreak-VPN-Profile nicht entfernen und "Bedarf verbinden"-Toggle
  ist disabled. allowEnablingRestrictions empirisch widerlegt für FC-Toggle-
  Lock — out.
- DEV-removable Variante als Test-Profile dazu.
- Bootstrap-Tool (rebreak-supervise.sh) + Supervision-Identity-Setup-Doc.
- PHASES.md updated mit empirischen Befunden.

App-side MDM-Detect (Pfad-a Banner-Logic):
- modules/rebreak-protection: getDeviceState() returnt mdmManaged via
  Heuristik NETunnelProviderManager.count > 1 (App selbst kann nur einen
  eigenen erstellen, MDM-Push fügt einen zweiten hinzu).
- DeviceLayers.mdmManaged?: boolean Type.
- blocker.tsx: lockedIn-Bedingung erweitert um mdmManaged. Bei MDM-managed
  iPhones wird der App-Lock-Card (FC-Authorization-Toggle UI) ausgeblendet
  weil der per-App FC-Toggle nicht lockbar ist und durch den MDM-VPN-Layer
  redundant.

Layer-2-Country-Curated-Pivot:
- backend: vip-swap.post.ts raus, suggest.post.ts rein. Curated-domains
  durch admin (separate Tabelle/Pfad), getrennt von User-Custom-Domains.
- Admin-APIs für curated-domain Pflege (index.get + [id].patch).
- seed-country-blocklists Script für initiale Curated-Domain-Liste.
- protection/webcontent-domains.get refactored für Country-Curated-Pfad.
- Migration drop_vip_swap_fields.sql + schema.prisma adjusted.
- docs/concepts/layer2-country-pivot.md mit Architektur + Decision-Trail.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 07:11:47 +02:00

3.1 KiB

Supervision-Identity einmaliger Setup

Eine Supervision-Identity ist ein Cert+Key-Paar (im .p12-Container), das beweist dass DEIN Mac der "Supervisor" eines iPhones ist. Apple verlangt das, damit ein iPhone nicht von beliebigen Macs supervised werden kann.

Einmal pro Mac generieren. Persistent für alle Devices und alle Sessions.

Ohne Identity scheitert cfgutil prepare --supervised mit einem Cert-Fehler.

Wo die Identity liegen muss

Das Bootstrap-Tool erwartet die Identity standardmäßig hier:

~/.rebreak-supervise/supervision-identity.p12

Override via Env-Variable SUPERVISION_IDENTITY_P12.

Pfad A — Via Apple Configurator 2 (GUI, empfohlen)

  1. Apple Configurator 2 öffnen
  2. Menü-Bar → Apple Configurator 2 → Einstellungen → Server (oder neuere Versionen: Organizations)
  3. +New Supervision Identity...
  4. Name vergeben (z.B. ReBreak Supervision Chahine 2026)
  5. Cert wird im macOS-Schlüsselbund gespeichert
  6. Schlüsselbund öffnen (Schlüsselbundverwaltung.app):
    • Suche nach dem Namen aus Schritt 4
    • Cert + Private-Key sollten beide sichtbar sein
    • Rechtsklick auf Cert → „2 Objekte exportieren..."
    • Format: „Personal Information Exchange (.p12)"
    • Speichern als ~/.rebreak-supervise/supervision-identity.p12
    • Passwort vergeben — leer lassen für einfachen Bootstrap-Tool-Zugriff, ODER Passwort setzen und manuell in ~/.rebreak-supervise/supervision-identity.pass ablegen (chmod 600)

Pfad B — Via cfgutil CLI

VERIFY ON DEVICE: exakte Flags noch zu validieren. Apple's CLI-Doku ist hier dünn.

mkdir -p ~/.rebreak-supervise
CFGUTIL=/Applications/Apple\ Configurator.app/Contents/MacOS/cfgutil

# Identity in Schlüsselbund generieren (cfgutil-eigener Aufruf)
"$CFGUTIL" generate-supervision-identity \
    --name "ReBreak Supervision $(whoami) $(date +%Y)"

# Dann via Pfad-A Schritt 6 exportieren (das CLI-Tool kann nicht direkt .p12 schreiben)

Verifikation

ls -l ~/.rebreak-supervise/supervision-identity.p12
# Sollte: -rw------- 1 ...

# Cert-Inhalt prüfen (Passwort eingeben falls gesetzt)
openssl pkcs12 -info -in ~/.rebreak-supervise/supervision-identity.p12 -nokeys

Erwartete Ausgabe enthält etwa:

subject=/CN=Apple Configurator/.../CN=ReBreak Supervision ...

Sicherheit

  • Die .p12 ist gleichwertig zur Macht ein iPhone zu supervisen — schützen wie einen SSH-Key
  • Niemals in Git committen
  • Bei Mac-Wechsel: Identity exportieren + auf neuen Mac übertragen (oder neu generieren — alte Devices akzeptieren dann nur die alte)
  • Bei Identity-Verlust: alte enrollte Devices bleiben weiter supervised, aber dieser Mac kann sie nicht mehr managen. Neuen Mac → neue Identity → User-Devices brauchen Re-Setup-Sandwich

Bei Fehler "supervision identity not trusted"

Apple verlangt manchmal dass die Identity im System-Schlüsselbund sitzt (nicht User). Workaround:

sudo security add-trusted-cert -d -r trustRoot \
    -k /Library/Keychains/System.keychain \
    ~/Path/to/exported-cert-only.cer

Oder via Apple Configurator GUI re-generieren — die GUI handhabt das korrekt.