- Klíče pro podepisování JWT — asymetrické páry klíčů ES256 (označené
kid), uložené vcore."signingKey", používané k podepisování a ověřování přístupových/obnovovacích tokenů. - Šifrovací klíč pro data v klidu —
ENCRYPTION_KEY, používaný k šifrování OAuth tokenů, aplikačních proměnných, soukromých klíčů podepisovacích klíčů, citlivých konfiguračních hodnot a TOTP tajemství uvnitř obálkyenc:v2:.
APP_SECRET je starší tajný klíč ponechaný kvůli zpětné kompatibilitě: pokud ENCRYPTION_KEY není nastaven, slouží jako záložní řešení pro šifrování dat v klidu i pro soubory cookie relace a stále ověřuje dříve existující HS256 přístupové tokeny. Bude označen jako zastaralý (deprecated).
Klíče pro podepisování JWT
Každý klíč nesepublicKey (uchovávaný neomezeně dlouho, aby mohl ověřovat dříve vydané tokeny), zašifrovaný privateKey (používaný pouze tehdy, když je klíč aktuální), příznak isCurrent (vždy přesně jeden záznam) a volitelné revokedAt.
Rotace aktuálního klíče
NastavteSIGNING_KEY_ROTATION_DAYS, chcete-li funkci povolit: denní cron poté vydá nový klíč jako aktuální, jakmile je stávající starší než zadaný práh. Předchozí klíče nejsou odvolány, takže tokeny pod nimi podepsané se dál úspěšně ověřují. Ponechte proměnnou nenastavenou, abyste deaktivovali automatickou rotaci.
Automatická rotace je k dispozici od verze v2.6+.
Odvolání klíče (pouze při úniku / v nouzi)
Settings → Admin Panel → Signing keys → Revoke na neaktuálním řádku. Smaže zašifrovaný privátní materiál, nastavírevokedAt a odmítne každý existující token podepsaný pod daným kid.
Rotace ENCRYPTION_KEY
Příkaz
secret-encryption:rotate popsaný níže je k dispozici od verze v2.6+.enc:v2:\<keyId>:\<payload>, kde \<keyId> je 8místný hexadecimální prefix odvozený ze surového klíče. Rotace probíhá online a je možné ji kdykoli znovu spustit.
-
Vygenerujte nový klíč:
openssl rand -base64 32. -
Nakonfigurujte oba klíče vedle sebe v
.enva poté restartujte:Nové zápisy používají nový klíč, existující řádky se stále dešifrují pomocí záložního klíče. -
Znovu zašifrujte existující řádky:
Příkaz prochází šest míst (
connected-account-tokens,application-variable,application-registration-variable,signing-key-private-keys,sensitive-config-storage,totp-secrets). SQL filtr přeskočí řádky, které už jsou na novém\<keyId>, takže příkaz je idempotentní: přerušte ho a znovu spusťte podle potřeby. Ukončí se s nenulovým kódem, pokud jakýkoli řádek selže — spusťte znovu pro opakování.Přepínač Popis -s, --site \<site>Omezí běh na jedno místo (site). -b, --batch-size \<n>Počet řádků v dávce (výchozí 200, maximum5000).-d, --dry-runDešifruje + znovu zašifruje v paměti, přeskočí UPDATE. -
Odstraňte záložní klíč jakmile
--dry-runukáže, že nezbývají žádné řádky: odeberteFALLBACK_ENCRYPTION_KEYa restartujte.
Podpora staršího APP_SECRET
Starší instance, které nikdy nenastavily ENCRYPTION_KEY, používají APP_SECRET jako šifrovací klíč pro data v klidu (a jako tajemství pro soubor cookie relace, odvozené z něj). Tato cesta je zachována kvůli zpětné kompatibilitě, ale je zastaralá (deprecated) — nastavte vyhrazený ENCRYPTION_KEY a podle výše uvedeného postupu rotace proveďte migraci pryč od něj. Samotný APP_SECRET zůstává v používání pro ověřování starších HS256 přístupových tokenů.