encrypted-session: Cifrar y descifrar valores de variables NGINX
Instalación
Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:
- RedHat Enterprise Linux 7, 8, 9 y 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 y 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
Habilita el módulo añadiendo lo siguiente al principio de /etc/nginx/nginx.conf:
load_module modules/ngx_http_encrypted_session_module.so;
Este documento describe nginx-module-encrypted-session v0.10 lanzado el 07 de junio de 2026.
# la clave debe tener 32 bytes de longitud
encrypted_session_key "abcdefghijklmnopqrstuvwxyz123456";
# el iv no debe ser más largo de 16 bytes
# por defecto: "deadbeefdeadbeef" (sin comillas)
encrypted_session_iv "1234567812345678";
# por defecto: 1d (1 día)
encrypted_session_expires 3600; # en seg
location /encrypt {
set $raw 'texto a cifrar'; # del módulo ngx_rewrite
set_encrypt_session $session $raw;
set_encode_base32 $session; # del módulo ngx_set_misc
add_header Set-Cookie 'my_login=$session'; # del módulo ngx_headers
# tu manejador de contenido va aquí...
}
location /decrypt {
set_decode_base32 $session $cookie_my_login; # del módulo ngx_set_misc
set_decrypt_session $raw $session;
if ($raw = '') {
# sesión inválida
}
# tu manejador de contenido va aquí...
}
Descripción
Este módulo proporciona soporte para cifrado y descifrado de variables NGINX basado en AES-256 con Mac.
Este módulo se utiliza generalmente con el módulo ngx_set_misc y las directivas del módulo de reescritura estándar.
Este módulo puede ser utilizado para implementar un inicio de sesión de usuario simple y ACL.
Generalmente, solo descifras datos a nivel de NGINX y pasas los datos sin cifrar a tu backend FastCGI/HTTP, como en
location /blah {
set_decrypt_session $raw_text $encrypted;
# esta directiva es del módulo 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;
}
Las aplicaciones web en Lua que se ejecutan directamente en ngx_lua pueden llamar a las directivas de este módulo directamente desde el código Lua:
local raw_text = ndk.set_var.set_decrypt_session(encrypted_text)
Directivas
encrypted_session_key
sintaxis: encrypted_session_key <key>
por defecto: no
contexto: http, server, server if, location, location if
Establece la clave para el cifrado (debe tener 32 bytes de longitud). Por ejemplo,
encrypted_session_key "abcdefghijklmnopqrstuvwxyz123456";
encrypted_session_iv
sintaxis: encrypted_session_iv <iv>
por defecto: encrypted_session_iv "deadbeefdeadbeef";
contexto: http, server, server if, location, location if
Establece el vector inicial utilizado para el cifrado (no debe ser más largo de 16 bytes).
Por ejemplo,
encrypted_session_iv "12345678";
encrypted_session_expires
sintaxis: encrypted_session_expires <time>
por defecto: encrypted_session_expires 1d;
contexto: http, server, server if, location, location if
Establece la diferencia de tiempo de expiración (en segundos por defecto).
Por ejemplo, considera la siguiente configuración:
encypted_session_expires 1d;
Cuando tu sesión se está generando, ngx_encrypted_session plantará un tiempo de expiración (1 día en el futuro en este ejemplo) en la cadena de sesión cifrada, de tal manera que cuando la sesión se descifre más tarde, el servidor puede extraer el tiempo de expiración de la sesión y compararlo con el tiempo del sistema actual del servidor. No importa cómo transfieras y almacenes tu sesión, ya sea usando cookies, o argumentos de consulta de URI, o lo que sea.
Las personas pueden confundir esta configuración con la fecha de expiración de las cookies HTTP. Esta directiva simplemente controla cuándo se expira la sesión; no sabe nada sobre las cookies HTTP. Incluso si el usuario final intercepta esta sesión de la cookie por sí mismo y la usa más tarde manualmente, el servidor aún la rechazará cuando el tiempo de expiración haya pasado.
set_encrypt_session
sintaxis: set_encrypt_session $target <value>
por defecto: no
contexto: http, server, server if, location, location if
Cifra el valor de cadena especificado por el argumento value y guarda el resultado en la variable especificada por $target.
Por ejemplo,
set_encrypt_session $res $value;
cifrará el valor en la variable $value en la variable objetivo $res.
El argumento value también puede ser un valor de cadena de NGINX, por ejemplo,
set_encrypt_session $res "mi valor = $value";
Los datos resultantes pueden ser descifrados más tarde a través de la directiva set_decrypt_session.
set_decrypt_session
sintaxis: set_decrypt_session $target <value>
por defecto: no
contexto: http, server, server if, location, location if
Similar a set_encrypt_session, pero realiza la operación inversa, es decir, descifra las cosas.
Ver También
GitHub
Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-encrypted-session.