Firebird-coderingsdemo
Hoe een Firebird-database versleutelen met de IBSurgeon-plugin: installeren op de server, verbinding maken vanuit een applicatie, ontwikkeltools gebruiken en versleutelde back-up/herstel uitvoeren. Volledig product: Encryption Framework.
Installatiescripts in 1 stap
Windows: voer de installer uit vanaf GitHub - Engels · Português.
Linux: gebruik de standaard Firebird-installer van IBSurgeon/firebirdlinuxinstall met -crypt-only.
Vereisten voor een handmatige installatie
- Firebird 3.0.3 of hoger (3.x, 4.x, 5.x). Oudere versies worden niet ondersteund door deze demo.
- Proefplug-inarchieven en de Delphi/Lazarus/.NET/PHP-voorbeelden (hieronder).
- Proef-DbCrypt.conf in
plugins. - Een SYSDBA-gebruiker. Indien ontbrekend: stop Firebird, voer
isql -user sysdba employee.fdbuit, voerCREATE USER SYSDBA PASSWORD 'masterkey';uit, start de service.
De walkthrough gebruikt 64-bits Firebird. Voor 32-bits neemt u bestanden uit het bijbehorende WINDOWS_32bit-archief (of Linux 32-bits).
Downloads
ExampleApplications.zip - gecompileerde democlient en broncode. DbCrypt.conf - proefsleutel.
Stap 1 - Initiële versleuteling (Windows-voorbeeld)
Plaats een onversleutelde database op een handige locatie, bijvoorbeeld C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB.
1. Alias in databases.conf
crypt = C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB
{
KeyHolderPlugin = KeyHolder
}
Om de sleutelhouder op elke database toe te passen, voegt u KeyHolderPlugin = KeyHolder toe in firebird.conf, of kopieert u het voorbeeld-firebird.conf uit het archief (stap 3).
2. Bestanden naar server/plugins
Vanuit FB_NN_WINDOWS_64bit\Server\plugins:
DbCrypt.dllDbCrypt.conf(proefsleutel)KeyHolder.dllKeyHolder.conf- tekstbestand met sleutels alleen voor ontwikkeling. Stuur dit niet mee naar eindgebruikers.
3. Bestanden naar de Firebird-hoofdmap
Vanuit FB_NN_WINDOWS_64bit\Server: fbcrypt.dll, libcrypto-1_1-x64.dll, libssl-1_1-x64.dll, gbak.exe, firebird.msg en optioneel firebird.conf.
4. Versleutelen met isql
isql localhost:C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB -user SYSDBA -pass masterkey
SQL> alter database encrypt with dbcrypt key red;
SQL> show database;
show database; (of gstat -h) moet Database encrypted melden.
dbcrypt is de plug-innaam; red is een sleutel gedefinieerd in KeyHolder.conf. Op Linux plaatst u namen tussen aanhalingstekens en let u op hoofdletters:
alter database encrypt with "DbCrypt" key Red;
Na deze stap bewaart de server sleutels in KeyHolder.conf (ontwikkel-/beheermodus).
Wat bevindt zich op de server versus de client
| Server | Client |
|---|---|
plugins/dbcrypt.dll, plugins/keyholder.dll, DbCrypt.conflibssl-1_1-x64.dll, libcrypto-1_1-x64.dll, fbcrypt.dllVersleutelde gbak: gbak.exe, firebird.msgOptioneel: plugins/KeyHolder.conf (ontwikkelsleutels), firebird.conf
|
fbclient.dll, fbcrypt.dll, libcrypto-1_1.dllOptioneel: firebird.conf
|
Stap 2 - Verbinding maken vanuit een clientapplicatie
Om een klantomgeving na te bootsen, hernoemt of verwijdert u plugins/KeyHolder.conf. De plug-in verwacht dan de sleutel van de applicatie. ExampleApplications.zip bevat een gecompileerde Delphi XE8-client plus Lazarus-, .NET- en PHP-voorbeelden.
Vóór de gebruikelijke verbinding stuurt de app de sleutel (een paar extra aanroepen). Daarna is Firebird-gebruik ongewijzigd. De Delphi-demo staat onder Example_Delphi_EnhancedCryptTestClient\Win32\Debug:
- Stel het databasepad of de alias in onder “1. Setup Login”.
- Voer de sleutelnaam en -waarde in (voor sleutel RED kopieert u de waarde uit
KeyHolder.conf). - U kunt met die sleutel versleutelen/ontsleutelen - versleuteling vereist een actieve verbinding en kost tijd.
- Klik op Execute query om een eenvoudige SELECT uit te voeren via de versleutelde verbinding.
De demo maakt alleen verbinding via TCP/IP - XNET wordt niet ondersteund. Het voorbeeld houdt verbindings-, transactie- en querystappen expliciet zodat u het patroon kunt kopiëren.
Stap 3 - Ontwikkeltools en opdrachtregel
Vanaf Encryption Framework v2021 kan fbclient.dll zelf sleutels laden. IBExpert, FlameRobin, SQLLY, Database Workbench, RedExpert, gfix, nbackup en vergelijkbare tools werken dan zonder codeaanpassingen.
Zorg dat de client-bitheid overeenkomt:
- Firebird-opdrachtregeltools (
isql,gfix,nbackup) komen overeen met de server - kopieerWindows_64bit\WindowsClientPart_64bitnaast die binaire bestanden. - De meeste GUI-tools zijn 32-bits - kopieer
Windows_32bit\WindowsClientPart_32bitnaar de map van de tool.
Opdrachtregeltools gebruiken dan plugins\KeyHolder.conf naast die kopie van fbclient. Andere apps geven de sleutel nog steeds zelf door.
- De tool start en laadt
fbclient.dll. fbclientleestfirebird.conf, zietKeyHolderPlugin=KeyHolderen laadtplugins\keyholder.dll.- KeyHolder leest
KeyHolder.conf(bijv. sleutel Red). isqlmaakt verbinding en kanSHOW DATABASEuitvoeren.
gbak: client-side sleutelladen produceert een onversleuteld .fbk-bestand. Gebruik de gbak van het framework met expliciete -KEYFILE / -KEYNAME / -KEY zodat de back-up versleuteld blijft.
nbackup: incrementele kopieën blijven versleuteld.
Stap 4 - Back-up en herstel
Standaard gbak kan een productieversleutelde database niet openen (geen sleutels op de server, geen sleutel van de client). Het framework levert een gbak die de back-up versleutelt met dezelfde sleutel als de database. gbak -? voegt toe:
-KEYFILE naam van een bestand met DB- en back-upcryptosleutel(s)
-KEYNAME naam van een sleutel die voor versleuteling moet worden gebruikt
-KEY sleutelwaarde in "0x5A,"-notatie
Back-up
Geef de sleutel op zodat gbak de database kan lezen en het .fbk-bestand kan versleutelen - hetzij een sleutelbestand (zelfde indeling als KeyHolder.conf) of een expliciete waarde. Het maken van een back-up van een niet-versleutelde database met deze switches levert nog steeds een versleutelde back-up op.
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
Met -KEY moet u nog steeds -KEYNAME doorgeven.
Herstel
Hetzelfde idee: sleutelbestand of expliciete sleutel. Het herstellen van een niet-versleutelde back-up met deze switches creëert een versleutelde database.
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