encrypted-session: Criptografar e descriptografar valores de variáveis do NGINX
Instalação
Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:
- RedHat Enterprise Linux 7, 8, 9 e 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 e 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
Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:
load_module modules/ngx_http_encrypted_session_module.so;
Este documento descreve o nginx-module-encrypted-session v0.9 lançado em 18 de novembro de 2021.
## key deve ter 32 bytes de comprimento
encrypted_session_key "abcdefghijklmnopqrstuvwxyz123456";
## iv não deve ter mais de 16 bytes
## padrão: "deadbeefdeadbeef" (sem aspas)
encrypted_session_iv "1234567812345678";
## padrão: 1d (1 dia)
encrypted_session_expires 3600; # em seg
location /encrypt {
set $raw 'texto a ser criptografado'; # do módulo ngx_rewrite
set_encrypt_session $session $raw;
set_encode_base32 $session; # do módulo ngx_set_misc
add_header Set-Cookie 'my_login=$session'; # do módulo ngx_headers
# seu manipulador de conteúdo vai aqui...
}
location /decrypt {
set_decode_base32 $session $cookie_my_login; # do módulo ngx_set_misc
set_decrypt_session $raw $session;
if ($raw = '') {
# sessão inválida
}
# seu manipulador de conteúdo vai aqui...
}
Descrição
Este módulo fornece suporte para criptografia e descriptografia de variáveis do nginx baseado em AES-256 com Mac.
Este módulo é geralmente usado com o ngx_set_misc module e as diretivas do módulo de reescrita padrão.
Este módulo pode ser usado para implementar login simples de usuários e ACL.
Geralmente, você apenas descriptografa dados no nível do nginx e passa os dados não criptografados para seu backend FastCGI/HTTP, como em
location /blah {
set_decrypt_session $raw_text $encrypted;
# esta diretiva é do 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;
}
Aplicações web em Lua que rodam diretamente no ngx_lua podem chamar as diretivas deste módulo diretamente de dentro do código Lua:
local raw_text = ndk.set_var.set_decrypt_session(encrypted_text)
Diretivas
encrypted_session_key
sintaxe: encrypted_session_key <key>
padrão: não
contexto: http, server, server if, location, location if
Define a chave para o cifrador (deve ter 32 bytes de comprimento). Por exemplo,
encrypted_session_key "abcdefghijklmnopqrstuvwxyz123456";
encrypted_session_iv
sintaxe: encrypted_session_iv <iv>
padrão: encrypted_session_iv "deadbeefdeadbeef";
contexto: http, server, server if, location, location if
Define o vetor inicial usado para o cifrador (não deve ter mais de 16 bytes).
Por exemplo,
encrypted_session_iv "12345678";
encrypted_session_expires
sintaxe: encrypted_session_expires <time>
padrão: encrypted_session_expires 1d;
contexto: http, server, server if, location, location if
Define a diferença de tempo de expiração (em segundos por padrão).
Por exemplo, considere a seguinte configuração:
encypted_session_expires 1d;
Quando sua sessão está sendo gerada, ngx_encrypted_session irá inserir um tempo de expiração (1 dia no futuro neste exemplo) na string da sessão criptografada, de forma que quando a sessão for descriptografada mais tarde, o servidor pode extrair o tempo de expiração da sessão e compará-lo com o tempo atual do sistema do servidor. Não importa como você transfere e armazena sua sessão, como usando cookies, ou argumentos de consulta de URI, ou o que for.
As pessoas podem confundir esta configuração com a data de expiração de cookies HTTP. Esta diretiva simplesmente controla quando a sessão expira; ela não sabe nada sobre cookies HTTP. Mesmo que o usuário final interceptasse esta sessão do cookie e a usasse manualmente mais tarde, o servidor ainda a rejeitará quando o tempo de expiração passar.
set_encrypt_session
sintaxe: set_encrypt_session $target <value>
padrão: não
contexto: http, server, server if, location, location if
Criptografa o valor da string especificado pelo argumento value e salva o resultado na variável especificada por $target.
Por exemplo,
set_encrypt_session $res $value;
criptografará o valor na variável $value na variável alvo $res.
O argumento value também pode ser um valor de string do nginx, por exemplo,
set_encrypt_session $res "meu valor = $value";
Os dados resultantes podem ser descriptografados posteriormente através da diretiva set_decrypt_session.
set_decrypt_session
sintaxe: set_decrypt_session $target <value>
padrão: não
contexto: http, server, server if, location, location if
Semelhante à set_encrypt_session, mas realiza a operação inversa, ou seja, descriptografa os dados.
Veja Também
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-encrypted-session.