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 das nginx-module-encrypted-session v0.9, das am 18. November 2021 veröffentlicht wurde.
## key muss 32 Bytes lang sein
encrypted_session_key "abcdefghijklmnopqrstuvwxyz123456";
## iv darf nicht länger als 16 Bytes sein
## standard: "deadbeefdeadbeef" (ohne Anführungszeichen)
encrypted_session_iv "1234567812345678";
## standard: 1d (1 Tag)
encrypted_session_expires 3600; # in Sek.
location /encrypt {
set $raw 'text to encrypted'; # vom ngx_rewrite Modul
set_encrypt_session $session $raw;
set_encode_base32 $session; # vom ngx_set_misc Modul
add_header Set-Cookie 'my_login=$session'; # vom ngx_headers Modul
# Ihr Inhalts-Handler kommt hier...
}
location /decrypt {
set_decode_base32 $session $cookie_my_login; # vom ngx_set_misc Modul
set_decrypt_session $raw $session;
if ($raw = '') {
# schlechte Sitzung
}
# Ihr Inhalts-Handler kommt hier...
}
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 ACL 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;
# diese Direktive stammt vom ngx_set_misc Modul
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 ziehen 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 abfängt und 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 durch $target angegebenen Variablen.
Zum Beispiel,
set_encrypt_session $res $value;
verschlüsselt den Wert in der Variablen $value in die Zielvariable $res.
Das value-Argument 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, d.h. entschlüsselt die Daten.
Siehe auch
GitHub
Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-encrypted-session.