encrypted-session: Verschlüsseln und Entschlüsseln von NGINX-Variablenwerten
Installation
Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:
- RedHat Enterprise Linux 7, 8, 9 und 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 und Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-encrypted-session
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-encrypted-session
Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:
load_module modules/ngx_http_encrypted_session_module.so;
Dieses Dokument beschreibt nginx-module-encrypted-session v0.10 veröffentlicht am 07. Juni 2026.
# key must be of 32 bytes long
encrypted_session_key "abcdefghijklmnopqrstuvwxyz123456";
# iv must not be longer than 16 bytes
# default: "deadbeefdeadbeef" (w/o quotes)
encrypted_session_iv "1234567812345678";
# default: 1d (1 day)
encrypted_session_expires 3600; # in sec
location /encrypt {
set $raw 'text to encrypted'; # from the ngx_rewrite module
set_encrypt_session $session $raw;
set_encode_base32 $session; # from the ngx_set_misc module
add_header Set-Cookie 'my_login=$session'; # from the ngx_headers module
# your content handler goes here...
}
location /decrypt {
set_decode_base32 $session $cookie_my_login; # from the ngx_set_misc module
set_decrypt_session $raw $session;
if ($raw = '') {
# bad session
}
# your content handler goes here...
}
Beschreibung
Dieses Modul bietet Unterstützung für die Verschlüsselung und Entschlüsselung von NGINX-Variablen basierend auf AES-256 mit Mac.
Dieses Modul wird normalerweise zusammen mit dem ngx_set_misc Modul und den Direktiven des Standard-Rewrite-Moduls verwendet.
Dieses Modul kann verwendet werden, um einfache Benutzeranmeldungen und ACLs zu implementieren.
Normalerweise entschlüsseln Sie Daten auf NGINX-Ebene und übergeben die unverschlüsselten Daten an Ihr FastCGI/HTTP-Backend, wie in
location /blah {
set_decrypt_session $raw_text $encrypted;
# this directive is from the ngx_set_misc module
set_escape_uri $escaped_raw_text $raw_text;
fastcgi_param QUERY_STRING "uid=$uid";
fastcgi_pass unix:/path/to/my/php/or/python/fastcgi.sock;
}
Lua-Webanwendungen, die direkt auf ngx_lua laufen, können die Direktiven dieses Moduls direkt aus dem Lua-Code aufrufen:
local raw_text = ndk.set_var.set_decrypt_session(encrypted_text)
Direktiven
encrypted_session_key
syntax: encrypted_session_key <key>
default: nein
context: http, server, server if, location, location if
Setzt den Schlüssel für den Cipher (muss 32 Bytes lang sein). Zum Beispiel,
encrypted_session_key "abcdefghijklmnopqrstuvwxyz123456";
encrypted_session_iv
syntax: encrypted_session_iv <iv>
default: encrypted_session_iv "deadbeefdeadbeef";
context: http, server, server if, location, location if
Setzt den Initialvektor, der für den Cipher verwendet wird (darf nicht länger als 16 Bytes sein).
Zum Beispiel,
encrypted_session_iv "12345678";
encrypted_session_expires
syntax: encrypted_session_expires <time>
default: encrypted_session_expires 1d;
context: http, server, server if, location, location if
Setzt die Ablaufzeitdifferenz (standardmäßig in Sekunden).
Zum Beispiel, betrachten Sie die folgende Konfiguration:
encypted_session_expires 1d;
Wenn Ihre Sitzung generiert wird, wird ngx_encrypted_session eine Ablaufzeit (1 Tag in der Zukunft in diesem Beispiel) in den verschlüsselten Sitzungsstring einfügen, sodass der Server beim späteren Entschlüsseln der Sitzung die Ablaufzeit aus der Sitzung abrufen und mit der aktuellen Systemzeit des Servers vergleichen kann. Egal, wie Sie Ihre Sitzung übertragen und speichern, sei es durch Cookies, URI-Abfrageargumente oder was auch immer.
Menschen könnten diese Einstellung mit dem Ablaufdatum von HTTP-Cookies verwechseln. Diese Direktive steuert einfach, wann die Sitzung abläuft; sie weiß nichts über HTTP-Cookies. Selbst wenn der Endbenutzer diese Sitzung selbst aus dem Cookie abgefangen hat und sie später manuell verwendet, wird der Server sie weiterhin ablehnen, wenn die Ablaufzeit überschritten ist.
set_encrypt_session
syntax: set_encrypt_session $target <value>
default: nein
context: http, server, server if, location, location if
Verschlüsselt den durch das Argument value angegebenen Stringwert und speichert das Ergebnis in
der Variablen, die durch $target angegeben ist.
Zum Beispiel,
set_encrypt_session $res $value;
verschlüsselt den Wert in der Variablen $value in die Zielvariable $res.
Das Argument value kann auch ein NGINX-Stringwert sein, zum Beispiel,
set_encrypt_session $res "my value = $value";
Die resultierenden Daten können später über die set_decrypt_session Direktive entschlüsselt werden.
set_decrypt_session
syntax: set_decrypt_session $target <value>
default: nein
context: http, server, server if, location, location if
Ähnlich wie set_encrypt_session, führt jedoch die inverse Operation aus, das heißt, um Dinge zu entschlüsseln.
Siehe auch
GitHub
Sie finden zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub Repository für nginx-module-encrypted-session.