Firebird-Verschlüsselungsdemo
So verschlüsseln Sie eine Firebird-Datenbank mit dem IBSurgeon-Plugin: Installation auf dem Server, Verbindung aus einer Anwendung, Nutzung von Entwicklerwerkzeugen und verschlüsseltes Backup/Restore. Vollversion: Encryption Framework.
1-Schritt-Installationsskripte
Windows: Installationsprogramm von GitHub ausführen - Englisch · Português.
Linux: das Standard-Firebird-Installationsprogramm von IBSurgeon/firebirdlinuxinstall mit -crypt-only verwenden.
Voraussetzungen für eine manuelle Installation
- Firebird 3.0.3 oder höher (3.x, 4.x, 5.x). Ältere Versionen werden von dieser Demo nicht unterstützt.
- Test-Plugin-Archive und die Delphi/Lazarus/.NET/PHP-Beispiele (unten).
- Test-DbCrypt.conf in
plugins. - Ein SYSDBA-Benutzer. Falls nicht vorhanden: Firebird stoppen,
isql -user sysdba employee.fdbausführen,CREATE USER SYSDBA PASSWORD 'masterkey';ausführen, Dienst starten.
Die Anleitung verwendet 64-Bit-Firebird. Für 32-Bit die Dateien aus dem passenden WINDOWS_32bit-Archiv (oder Linux-32-Bit) nehmen.
Downloads
ExampleApplications.zip - kompilierter Demo-Client und Quellcode. DbCrypt.conf - Testschlüssel.
Schritt 1 - Erste Verschlüsselung (Windows-Beispiel)
Legen Sie eine unverschlüsselte Datenbank an einem geeigneten Ort ab, z. B. C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB.
1. Alias in databases.conf
crypt = C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB
{
KeyHolderPlugin = KeyHolder
}
Um den KeyHolder auf jede Datenbank anzuwenden, fügen Sie KeyHolderPlugin = KeyHolder in firebird.conf hinzu oder kopieren Sie die Beispiel-firebird.conf aus dem Archiv (Schritt 3).
2. Dateien in server/plugins
Aus FB_NN_WINDOWS_64bit\Server\plugins:
DbCrypt.dllDbCrypt.conf(Testschlüssel)KeyHolder.dllKeyHolder.conf- Textdatei mit Schlüsseln nur für die Entwicklung. Nicht an Endbenutzer ausliefern.
3. Dateien in das Firebird-Wurzelverzeichnis
Aus FB_NN_WINDOWS_64bit\Server: fbcrypt.dll, libcrypto-1_1-x64.dll, libssl-1_1-x64.dll, gbak.exe, firebird.msg und optional firebird.conf.
4. Mit isql verschlüsseln
isql localhost:C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB -user SYSDBA -pass masterkey
SQL> alter database encrypt with dbcrypt key red;
SQL> show database;
show database; (oder gstat -h) sollte Database encrypted melden.
dbcrypt ist der Plugin-Name; red ist ein in KeyHolder.conf definierter Schlüssel. Unter Linux Namen in Anführungszeichen setzen und Groß-/Kleinschreibung beachten:
alter database encrypt with "DbCrypt" key Red;
Nach diesem Schritt hält der Server die Schlüssel in KeyHolder.conf (Entwicklungs-/Administratormodus).
Was auf dem Server vs. auf dem Client liegt
| Server | Client |
|---|---|
plugins/dbcrypt.dll, plugins/keyholder.dll, DbCrypt.conflibssl-1_1-x64.dll, libcrypto-1_1-x64.dll, fbcrypt.dllVerschlüsseltes gbak: gbak.exe, firebird.msgOptional: plugins/KeyHolder.conf (Entwicklungsschlüssel), firebird.conf
|
fbclient.dll, fbcrypt.dll, libcrypto-1_1.dllOptional: firebird.conf
|
Schritt 2 - Verbindung aus einer Client-Anwendung
Um eine Kundensituation nachzubilden, benennen Sie plugins/KeyHolder.conf um oder entfernen Sie sie. Das Plugin erwartet dann den Schlüssel von der Anwendung. ExampleApplications.zip enthält einen kompilierten Delphi-XE8-Client sowie Lazarus-, .NET- und PHP-Beispiele.
Vor der üblichen Verbindung sendet die App den Schlüssel (ein paar zusätzliche Aufrufe). Danach bleibt die Firebird-Nutzung unverändert. Die Delphi-Demo liegt unter Example_Delphi_EnhancedCryptTestClient\Win32\Debug:
- Datenbankpfad oder Alias unter „1. Setup Login“ festlegen.
- Schlüsselnamen und -wert eingeben (für Schlüssel RED den Wert aus
KeyHolder.confkopieren). - Sie können mit diesem Schlüssel verschlüsseln/entschlüsseln - Verschlüsselung benötigt eine aktive Verbindung und dauert.
- Auf „Execute query“ klicken, um eine einfache SELECT-Abfrage über die verschlüsselte Verbindung auszuführen.
Die Demo verbindet nur über TCP/IP - XNET wird nicht unterstützt. Das Beispiel hält Verbindungs-, Transaktions- und Abfrageschritte explizit getrennt, damit Sie das Muster übernehmen können.
Schritt 3 - Entwicklerwerkzeuge und Befehlszeile
Ab Encryption Framework v2021 kann fbclient.dll Schlüssel selbst laden. IBExpert, FlameRobin, SQLLY, Database Workbench, RedExpert, gfix, nbackup und ähnliche Werkzeuge funktionieren dann ohne Codeänderungen.
Bitbreite des Clients beachten:
- Firebird-Befehlszeilenwerkzeuge (
isql,gfix,nbackup) entsprechen dem Server -Windows_64bit\WindowsClientPart_64bitneben diese Binärdateien kopieren. - Die meisten GUI-Werkzeuge sind 32-Bit -
Windows_32bit\WindowsClientPart_32bitin den Ordner des Werkzeugs kopieren.
Befehlszeilenwerkzeuge verwenden dann plugins\KeyHolder.conf neben dieser Kopie von fbclient. Andere Apps übergeben den Schlüssel weiterhin selbst.
- Das Werkzeug startet und lädt
fbclient.dll. fbclientliestfirebird.conf, siehtKeyHolderPlugin=KeyHolderund lädtplugins\keyholder.dll.- KeyHolder liest
KeyHolder.conf(z. B. Schlüssel Red). isqlverbindet sich und kannSHOW DATABASEausführen.
gbak: Das clientseitige Laden des Schlüssels erzeugt eine unverschlüsselte .fbk-Datei. Verwenden Sie das Framework-gbak mit explizitem -KEYFILE / -KEYNAME / -KEY, damit das Backup verschlüsselt bleibt.
nbackup: Inkrementelle Kopien bleiben verschlüsselt.
Schritt 4 - Backup und Wiederherstellung
Das Standard-gbak kann eine produktive verschlüsselte Datenbank nicht öffnen (keine Schlüssel auf dem Server, kein Schlüssel vom Client). Das Framework enthält ein gbak, das das Backup mit demselben Schlüssel wie die Datenbank verschlüsselt. gbak -? fügt hinzu:
-KEYFILE Name einer Datei mit DB- und Backup-Verschlüsselungsschlüsseln
-KEYNAME Name eines Schlüssels, der für die Verschlüsselung verwendet werden soll
-KEY Schlüsselwert in der Notation "0x5A,"
Backup
Geben Sie den Schlüssel an, damit gbak die Datenbank lesen und die .fbk-Datei verschlüsseln kann - entweder eine Schlüsseldatei (gleiches Layout wie KeyHolder.conf) oder einen expliziten Wert. Das Sichern einer unverschlüsselten Datenbank mit diesen Schaltern erzeugt dennoch ein verschlüsseltes Backup.
gbak.exe -b -KEYFILE h:\Firebird\examplekeyfile.txt -KEYNAME RED localhost:h:\employee_30.fdb h:\testenc4.fbk -user SYSDBA -pass masterkey
gbak -b -KEY 0xec,0xa1,0x52,0xf6,0x4d,0x27,0xda,0x93,0x53,0xe5,0x48,0x86,0xb9,0x7d,0xe2,0x8f,0x3b,0xfa,0xb7,0x91,0x22,0x5b,0x59,0x15,0x82,0x35,0xf5,0x30,0x1f,0x04,0xdc,0x75, -keyname RED localhost:h:\employee30\employee30.fdb h:\testenc303.fbk -user SYSDBA -pass masterkey
Mit -KEY müssen Sie weiterhin -KEYNAME angeben.
Wiederherstellung
Gleiche Idee: Schlüsseldatei oder expliziter Schlüssel. Das Wiederherstellen eines unverschlüsselten Backups mit diesen Schaltern erzeugt eine verschlüsselte Datenbank.
gbak -c -v -keyfile h:\Firebird\examplekeyfile.txt -keyname white h:\testenc4.fbk localhost:h:\employeeenc4.fdb -user SYSDBA -pass masterkey
gbak -c -v -key 0xec,0xa1,0x52,0xf6,0x4d,0x27,0xda,0x93,0x53,0xe5,0x48,0x86,0xb9,0x7d,0xe2,0x8f,0x3b,0xfa,0xb7,0x91,0x22,0x5b,0x59,0x15,0x82,0x35,0xf5,0x30,0x1f,0x04,0xdc,0x75, -keyname RED h:\testenc4.fbk localhost:h:\employeeenc4.fdb -user SYSDBA -pass masterkey