Farbschema: Dunkel
Sie befinden sich hier: start » de » Dokumentation » Datenintegration und Datenzugriff » WKL Database Gateway » Betrieb » So wechseln Sie den Hauptschlüssel

So wechseln Sie den Hauptschlüssel

Der Hauptschlüssel verschlüsselt die Verbindungszeichenfolgen und zweiten Faktoren im Verwaltungsspeicher. Wechseln Sie ihn, wenn eine Person ausscheidet, die ihn kannte, oder wenn er in falsche Hände geraten sein könnte.

Grenze: Der Wechsel schützt nur künftige Kopien. Eine Kopie der Datei oder Sicherung, die zusammen mit dem alten Schlüssel schon in falsche Hände geraten ist, öffnet weiter die Verbindungszeichenfolgen und die Geheimnisse der zweiten Faktoren. Ändern Sie in diesem Fall zusätzlich die Kennwörter der Anmeldungen in den Verbindungszeichenfolgen und richten Sie die zweiten Faktoren neu ein (reset-totp).

Lösungsübersicht

Der Wechsel kommt ohne Datenverlust und mit zwei kurzen Neustarts des Dienstes aus: Der alte Schlüssel bleibt eine Weile als „abgelöst“ bekannt, sodass sich alle Werte weiter öffnen, und der Befehl reseal-store verschlüsselt sie mit dem neuen Schlüssel neu. Jeder Neustart unterbricht laufende Anfragen und offene Transaktionen; legen Sie den Wechsel deshalb in eine ruhige Zeit.

Umsetzung

Die Schritte gehen von einer Installation mit dem Installationspaket aus: Programm unter %ProgramFiles%\Wkl\Data Gateway, Datenordner %ProgramData%\Wkl.Data.Gateway, bisheriger Schlüssel in geheim\hauptschluessel.key mit der Kennung 1 (Vorgabe von MasterKeyId). Führen Sie sie in PowerShell als Administrator aus.

  1. Den neuen Schlüssel (32 Zufallsbytes) direkt in eine Datei im Ordner geheim schreiben. Er erscheint so weder auf dem Bildschirm noch im Verlauf der Konsole; die Datei erbt die eingeschränkten Berechtigungen des Ordners (Administratoren, System, Dienstkonto nur lesend):

    $secretFolder = Join-Path $env:ProgramData 'Wkl.Data.Gateway\geheim'
    [IO.File]::WriteAllText((Join-Path $secretFolder 'hauptschluessel-2.key'),
        [Convert]::ToBase64String([Security.Cryptography.RandomNumberGenerator]::GetBytes(32)))
  2. Den Wechsel in appsettings.Local.json im Programmordner eintragen (Datei anlegen, falls es sie nicht gibt). Nicht in appsettings.Production.json: Diese Datei gehört dem Installationsprogramm und wird beim „Ändern“ neu geschrieben; ein abgelöster Schlüssel ginge dort verloren. Die Schlüssel stehen als Verweis (file: oder env:), nie im Klartext:

    {
      "Gateway": {
        "Store": {
          "MasterKey": "file:C:\\ProgramData\\Wkl.Data.Gateway\\geheim\\hauptschluessel-2.key",
          "MasterKeyId": "2",
          "RetiredKeys": [
            { "Id": "1", "Key": "file:C:\\ProgramData\\Wkl.Data.Gateway\\geheim\\hauptschluessel.key" }
          ]
        }
      }
    }
  3. Dienst neu starten (Restart-Service Wkl.Data.Gateway). Alle Werte öffnen sich weiter; neue und geänderte verschlüsselt der Dienst mit dem neuen Schlüssel. Startet er nicht, nennt das Ereignisprotokoll den Grund (meist ein Tippfehler im Pfad).
  4. Im Programmordner ausführen:

    Set-Location (Join-Path $env:ProgramFiles 'Wkl\Data Gateway')
    .\dbgwsvc.exe reseal-store

    Rückgabe 0: Alle Werte sind neu verschlüsselt. Der Befehl darf laufen, während der Dienst läuft. Er liest dieselbe Konfiguration wie der Dienst aus dem Arbeitsverzeichnis.

  5. Den Eintrag RetiredKeys entfernen und den Dienst erneut neu starten. Die Datei hauptschluessel.key nicht löschen, solange Sicherungen existieren, die mit ihr geschrieben wurden (siehe Hinweise), sondern zusammen mit diesen Sicherungen außerhalb des Servers aufbewahren.
  6. Eine neue Sicherung anlegen und den neuen Schlüssel außerhalb des Servers sichern, siehe Sicherung.

Ergebnis: Der Speicher hängt nur noch vom neuen Schlüssel ab. Die Warnung beim Start, die Werte unter anderen Schlüsseln zählt, verschwindet. Clients lesen vor, während und nach dem Neuverschlüsseln dieselben Daten.

Hinweise

  • Ältere Sicherungen öffnen sich nur mit dem alten Schlüssel. Bewahren Sie ihn so lange auf wie diese Sicherungen.
  • Zu früh entfernt? Fehlt ein Schlüssel, den noch ein Wert braucht, startet der Dienst nicht und nennt jede betroffene Datenquelle. Den alten Schlüssel wieder unter RetiredKeys eintragen.
  • Ein verlorener Schlüssel lässt sich nicht ersetzen. Die Werte, die er verschlüsselt hat, müssen neu eingegeben werden: Verbindungszeichenfolgen in Datenquellen, zweite Faktoren durch Neueinrichten.
  • Reihenfolge bei einem Update: Erst den Dienst aktualisieren, danach den Schlüssel wechseln – nicht beides in einem Schritt.

Verwandte Themen

de/wiki/data-conectivity/database-gateway/operations/change-master-key.txt · Zuletzt geändert: von Wolfgang van der Stille