Zum Inhalt

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.