encrypted-session: Chiffrer et déchiffrer les valeurs de variables NGINX
Installation
Vous pouvez installer ce module dans toute distribution basée sur RHEL, y compris, mais sans s'y limiter :
- RedHat Enterprise Linux 7, 8, 9 et 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 et 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
Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :
load_module modules/ngx_http_encrypted_session_module.so;
Ce document décrit nginx-module-encrypted-session v0.9 publié le 18 novembre 2021.
## la clé doit faire 32 octets de long
encrypted_session_key "abcdefghijklmnopqrstuvwxyz123456";
## l'iv ne doit pas dépasser 16 octets
## par défaut : "deadbeefdeadbeef" (sans les guillemets)
encrypted_session_iv "1234567812345678";
## par défaut : 1d (1 jour)
encrypted_session_expires 3600; # en sec
location /encrypt {
set $raw 'texte à chiffrer'; # depuis le module ngx_rewrite
set_encrypt_session $session $raw;
set_encode_base32 $session; # depuis le module ngx_set_misc
add_header Set-Cookie 'my_login=$session'; # depuis le module ngx_headers
# votre gestionnaire de contenu va ici...
}
location /decrypt {
set_decode_base32 $session $cookie_my_login; # depuis le module ngx_set_misc
set_decrypt_session $raw $session;
if ($raw = '') {
# mauvaise session
}
# votre gestionnaire de contenu va ici...
}
Description
Ce module fournit un support de chiffrement et de déchiffrement pour les variables nginx basé sur AES-256 avec Mac.
Ce module est généralement utilisé avec le module ngx_set_misc et les directives du module de réécriture standard.
Ce module peut être utilisé pour implémenter une connexion utilisateur simple et un contrôle d'accès (ACL).
En général, vous déchiffrez simplement les données au niveau nginx et passez les données non chiffrées à votre backend FastCGI/HTTP, comme dans
location /blah {
set_decrypt_session $raw_text $encrypted;
# cette directive provient du module ngx_set_misc
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;
}
Les applications web Lua s'exécutant directement sur ngx_lua peuvent appeler les directives de ce module directement depuis le code Lua :
local raw_text = ndk.set_var.set_decrypt_session(encrypted_text)
Directives
encrypted_session_key
syntax: encrypted_session_key <key>
default: non
context: http, server, server if, location, location if
Définit la clé pour le chiffrement (doit faire 32 octets de long). Par exemple,
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
Définit le vecteur d'initialisation utilisé pour le chiffrement (ne doit pas être plus long que 16 octets).
Par exemple,
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
Définit la durée d'expiration (en secondes par défaut).
Par exemple, considérez la configuration suivante :
encypted_session_expires 1d;
Lorsque votre session est générée, ngx_encrypted_session va insérer une durée d'expiration (1 jour dans le futur dans cet exemple) dans la chaîne de session chiffrée, de sorte que lorsque la session est déchiffrée plus tard, le serveur peut extraire la durée d'expiration de la session et la comparer avec l'heure système actuelle du serveur. Peu importe comment vous transférez et stockez votre session, que ce soit en utilisant des cookies, ou des arguments de requête URI, ou autre.
Les gens peuvent confondre ce paramètre avec la date d'expiration des cookies HTTP. Cette directive contrôle simplement quand la session expire ; elle ne sait rien des cookies HTTP. Même si l'utilisateur final intercepte cette session depuis le cookie par lui-même et l'utilise manuellement plus tard, le serveur la rejettera toujours lorsque la durée d'expiration sera dépassée.
set_encrypt_session
syntax: set_encrypt_session $target <value>
default: non
context: http, server, server if, location, location if
Chiffre la valeur de chaîne spécifiée par l'argument value et enregistre le résultat dans
la variable spécifiée par $target.
Par exemple,
set_encrypt_session $res $value;
chiffrera la valeur dans la variable $value dans la variable cible $res.
L'argument value peut également être une valeur de chaîne nginx, par exemple,
set_encrypt_session $res "ma valeur = $value";
Les données résultantes peuvent être déchiffrées ultérieurement via la directive set_decrypt_session.
set_decrypt_session
syntax: set_decrypt_session $target <value>
default: non
context: http, server, server if, location, location if
Semblable à set_encrypt_session, mais effectue l'opération inverse, c'est-à-dire, pour déchiffrer les données.
Voir Aussi
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-encrypted-session.