Zum Hauptinhalt springen

Rotation des Verschlüsselungsschlüssels

Während der Rotation des Verschlüsselungsschlüssels muss die Datenbank neu verschlüsselt werden. Während dieser Vorgang läuft, wechselt Passwork in den Servicemodus: Die Weboberfläche und die Automatisierungen sind nicht verfügbar.

gefahr

Vor der Rotation müssen Sie eine Sicherungskopie der Passwork-Datenbank und des encryption_key erstellen.

Beispiele für die Erstellung und Wiederherstellung von Backups

Allgemeine Informationen

Während der Rotation liest Passwork den aktuellen Schlüssel aus encryption_key oder aus der Umgebungsvariable ENCRYPTION_KEY, prüft, ob er mit den internen Einstellungen übereinstimmt, und liest den neuen Schlüssel aus der Datei new_encryption_key.

Nach erfolgreichem Abschluss der Rotation ersetzt new_encryption_key den aktuellen encryption_key. Der alte Schlüssel wird im selben Verzeichnis mit einem Zeitstempel gespeichert.

Vorgehensweise

Aktivieren des Servicemodus

Wenn der Servicemodus aktiviert ist, wird der Zugriff auf die Weboberfläche und auf Automatisierungen, die die API verwenden, gesperrt. Die Aktivierung des Servicemodus ist erforderlich:

sudo -u www-data bash -c 'cd /var/www && php bin/console app:service-mode enable'

Generieren eines neuen Verschlüsselungsschlüssels

Um einen neuen Verschlüsselungsschlüssel zu erstellen und ihn in der Datei new_encryption_key zu speichern:

sudo -u www-data bash -c 'cd /var/www && php bin/console encryption-key:generate'
info

Wenn die Datei new_encryption_key bereits vorhanden ist, schlägt der Befehl fehl.

Testlauf (Dry Run)

Der Befehl encryption-key:update ohne den Parameter --apply wird im Dry-Run-Modus ausgeführt:

sudo -u www-data bash -c 'cd /var/www && php -d memory_limit=-1 bin/console encryption-key:update --ansi'
Erläuterung der Ausgabe
SpalteBeschreibung
FoundAnzahl der gefundenen Datensätze oder Werte, die für die Prüfung in dieser Phase geeignet sind. Ein Wert von 0 bedeutet, dass keine solchen Daten in der Datenbank vorhanden sind.
ProcessedAnzahl der Werte, die der Befehl erfolgreich geprüft hat: mit dem alten Schlüssel entschlüsselt und für die Verschlüsselung mit dem neuen Schlüssel vorbereitet.
SkippedAnzahl der gefundenen Datensätze, die keine Verarbeitung erfordern oder keine Werte für die Neuverschlüsselung enthalten. Zum Beispiel können SMTP-Einstellungen gefunden werden, das Passwort jedoch fehlen.
RestoredAnzahl der Werte, die bei einer erneuten Ausführung nach einer Unterbrechung übersprungen wurden, weil sich ihr Zustand bereits vom gespeicherten Zwischenzustand unterscheidet. Bei einem normalen Testlauf ist dieser Wert 0.
ConflictsAnzahl der Konflikte bei der Fortsetzung eines unterbrochenen Vorgangs. Zum Beispiel, wenn ein zuvor zur Fortsetzung gespeicherter Datensatz nicht mehr gefunden werden kann. Bei einem normalen Testlauf ist dieser Wert 0.
SecondsAusführungszeit einer bestimmten Phase in Sekunden.
gefahr

Wenn der Dry-Run mit einem Fehler endet, ist eine Neuverschlüsselung erst möglich, nachdem die Fehlerursachen behoben wurden.

Anwenden der Neuverschlüsselung

Der Parameter --apply startet die Datenänderung. Bevor die Änderungen angewendet werden, zeigt der Befehl eine Warnung an und fordert eine Bestätigung an:

sudo -u www-data bash -c 'cd /var/www && php -d memory_limit=-1 bin/console encryption-key:update --apply'

Nach erfolgreichem Abschluss:

  • Verschlüsselte Werte in der Datenbank werden mit dem neuen Schlüssel neu verschlüsselt;
  • Die Datei new_encryption_key wird in encryption_key umbenannt;
  • Die alte encryption_key wird in die Backup-Datei encryption_key.<date_and_time>.bak umbenannt.

Deaktivieren des Servicemodus

Nachdem die Neuverschlüsselung erfolgreich abgeschlossen wurde, muss der Servicemodus deaktiviert werden, um den Zugriff auf die Passwork-Weboberfläche und die Automatisierungen wiederherzustellen:

sudo -u www-data bash -c 'cd /var/www && php bin/console app:service-mode disable'
gefahr

Der Servicemodus sollte nicht deaktiviert werden, bevor encryption-key:update --apply erfolgreich abgeschlossen ist.

Wenn die Ausführung unterbrochen wurde

Wenn die Befehlsausführung unterbrochen wurde, kann die Neuverschlüsselung erneut gestartet werden. Passwork speichert den Zustand des Vorgangs und setzt die Verarbeitung an der Stelle fort, an der der vorherige Versuch gestoppt wurde.

Um fortzufahren, verwenden Sie dieselbe Datei new_encryption_key:

sudo -u www-data bash -c 'cd /var/www && php -d memory_limit=-1 bin/console encryption-key:update --apply'
info

Wenn nach dem Ersetzen der Datei encryption_key ein Fehler auftritt, versucht Passwork, die alte Schlüsseldatei aus der Backup-Datei wiederherzustellen.

Prüfungen und Einschränkungen

Der Befehl encryption-key:update startet nicht, wenn:

  • Der Servicemodus deaktiviert ist;
  • Der aktuelle Verschlüsselungsschlüssel nicht mit dem Hash in der Datenbank übereinstimmt;
  • Die Datei new_encryption_key fehlt oder beschädigt ist.

Überprüfen Sie nach einer erfolgreichen Rotation, ob Passwork korrekt funktioniert, und stellen Sie sicher, dass Benutzer Daten öffnen können. Löschen Sie das Backup des alten Schlüssels erst, nachdem Sie die Funktionsfähigkeit überprüft und die Korrektheit der Sicherungskopie bestätigt haben.