Hoppa till huvudinnehåll

Databaskryptering

Libre WebUI har en krypteringstjänst på programnivå som skyddar känsliga värden innan de skrivs till lagring.

Krypteringsmetod

Backend använder AES-256-GCM genom Node.js crypto. Krypteringsnyckeln måste vara 32 byte och anges som en hexadecimal sträng med 64 tecken:

ENCRYPTION_KEY=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

Skapa en nyckel:

openssl rand -hex 32

Nyckellagring

Libre WebUI läser in nyckeln i följande ordning:

  1. ENCRYPTION_KEY från miljön.
  2. En beständig .encryption_key-fil under vald DATA_DIR.
  3. Endast för ett nytt datalager: en ny nyckel som skrivs beständigt till DATA_DIR/.encryption_key innan databasen startar.

Om både miljön och den beständiga filen anger en nyckel måste de matcha, annars avbryts starten. Befintligt krypterat tillstånd utan originalnyckeln avvisas också säkert; Libre skapar aldrig en ersättningsnyckel för ett befintligt lager.

Viktiga nyckelregler

  • Säkerhetskopiera ENCRYPTION_KEY tillsammans med databasen.
  • Rotera inte nyckeln utan en migreringsplan för krypterade värden.
  • Om nyckeln förloras kan krypterade värden inte återställas.
  • Om nyckeln ändras utan att data krypteras om blir befintliga värden oläsbara.

Vad som skyddas

Kryptering tillämpas av kodvägar som använder krypteringstjänsten eller hjälpfunktioner för krypterad lagring. Den är avsedd för känsliga programvärden, exempelvis autentiseringsuppgifter och privata användardata som hanteras av dessa hjälpfunktioner.

Det är inte heldiskkryptering, SQLite-sidkryptering eller totalsträckskryptering mellan användare och webbläsare. Använd diskkryptering och HTTPS för dessa lager.

Work-data

Kryptering på programnivå krypterar inte en hel Work-uppgift. Work-källfiler och projektberoenden är vanliga filer i namngivna Docker-volymer som avgränsas per uppgift. Work-konversationer, verktygsresultat, kommandoutdata och uppgiftsmetadata lagras i SQLite och krypteras inte automatiskt bara för att vissa lagringsvägar för autentiseringsuppgifter använder krypteringstjänsten.

Skydda Dockers datarot och DATA_DIR med åtkomstkontroller och diskkryptering när det behövs. Säkerhetskopiera databasen, ENCRYPTION_KEY och hanterade Work-volymer tillsammans. En Work-uppgift som skickas till en fjärrmodell kan även röja konversationskontext och begärd fil- eller kommandoutdata för leverantören; lagringskryptering ändrar inte den nätverksgränsen.

Docker och Kubernetes

Ange uttryckligen en stabil nyckel för produktion:

ENCRYPTION_KEY=replace-with-64-hex-characters
DATA_DIR=/data

Montera DATA_DIR på beständig lagring. I Kubernetes lagras nyckeln i en Secret och data monteras på en PersistentVolume.

Felsökning

Ogiltig nyckellängd

Nyckeln måste bestå av exakt 64 hexadecimala tecken. Skapa en ny med:

openssl rand -hex 32

Data kan inte dekrypteras efter en ny driftsättning

Kontrollera att samma ENCRYPTION_KEY används och att samma DATA_DIR-volym är monterad.

Utvecklingsmiljön skapade en ny nyckel

Behåll DATA_DIR/.encryption_key tillsammans med databasen. Du kan i stället ange samma värde via ENCRYPTION_KEY; om båda källorna finns måste de matcha.

Relaterad dokumentation