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.
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:
- DEB
- RPM
- Docker
- PowerShell
sudo -u www-data bash -c 'cd /var/www && php bin/console app:service-mode enable'
sudo -u apache bash -c 'cd /var/www && php bin/console app:service-mode enable'
docker compose exec -T php-fpm sh -c 'cd /server/www && php bin/console app:service-mode enable'
cd "C:\inetpub\wwwroot\passwork"
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:
- DEB
- RPM
- Docker
- PowerShell
sudo -u www-data bash -c 'cd /var/www && php bin/console encryption-key:generate'
sudo -u apache bash -c 'cd /var/www && php bin/console encryption-key:generate'
docker compose exec -T php-fpm sh -c 'cd /server/www && php bin/console encryption-key:generate'
php .\bin\console encryption-key:generate
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:
- DEB
- RPM
- Docker
- PowerShell
sudo -u www-data bash -c 'cd /var/www && php -d memory_limit=-1 bin/console encryption-key:update --ansi'
sudo -u apache bash -c 'cd /var/www && php -d memory_limit=-1 bin/console encryption-key:update --ansi'
docker compose exec -T php-fpm sh -c 'cd /server/www && php -d memory_limit=-1 bin/console encryption-key:update --ansi'
php -d "memory_limit=-1" .\bin\console encryption-key:update --ansi
Erläuterung der Ausgabe
| Spalte | Beschreibung |
|---|---|
Found | Anzahl 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. |
Processed | Anzahl 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. |
Skipped | Anzahl 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. |
Restored | Anzahl 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. |
Conflicts | Anzahl 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. |
Seconds | Ausführungszeit einer bestimmten Phase in Sekunden. |
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:
- DEB
- RPM
- Docker
- PowerShell
sudo -u www-data bash -c 'cd /var/www && php -d memory_limit=-1 bin/console encryption-key:update --apply'
sudo -u apache bash -c 'cd /var/www && php -d memory_limit=-1 bin/console encryption-key:update --apply'
docker compose exec -T php-fpm sh -c 'cd /server/www && php -d memory_limit=-1 bin/console encryption-key:update --apply'
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_keywird inencryption_keyumbenannt; - Die alte
encryption_keywird in die Backup-Dateiencryption_key.<date_and_time>.bakumbenannt.
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:
- DEB
- RPM
- Docker
- PowerShell
sudo -u www-data bash -c 'cd /var/www && php bin/console app:service-mode disable'
sudo -u apache bash -c 'cd /var/www && php bin/console app:service-mode disable'
docker compose exec -T php-fpm sh -c 'cd /server/www && php bin/console app:service-mode disable'
php .\bin\console app:service-mode disable
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:
- DEB
- RPM
- Docker
- PowerShell
sudo -u www-data bash -c 'cd /var/www && php -d memory_limit=-1 bin/console encryption-key:update --apply'
sudo -u apache bash -c 'cd /var/www && php -d memory_limit=-1 bin/console encryption-key:update --apply'
docker compose exec -T php-fpm sh -c 'cd /server/www && php -d memory_limit=-1 bin/console encryption-key:update --apply'
php -d "memory_limit=-1" .\bin\console encryption-key:update --apply
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_keyfehlt 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.