encrypted-session: Шифрование и расшифровка значений переменных NGINX
Установка на Debian/Ubuntu
Эти документы относятся к APT пакету nginx-module-encrypted-session, предоставляемому репозиторием GetPageSpeed Extras.
- Настройте репозиторий APT, как описано в настройке репозитория APT.
- Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-encrypted-session
Warning
Этот модуль еще не опубликован как nginx-module-encrypted-session в репозиториях APT. Следите за новостями или напишите на support@getpagespeed.com, чтобы запросить его.
encrypted-session-nginx-module - шифрование и расшифровка значений переменных nginx
инструкции по установке.
Статус
Этот модуль готов к производству.
Синопсис
## ключ должен быть длиной 32 байта
encrypted_session_key "abcdefghijklmnopqrstuvwxyz123456";
## iv не должен превышать 16 байт
## по умолчанию: "deadbeefdeadbeef" (без кавычек)
encrypted_session_iv "1234567812345678";
## по умолчанию: 1d (1 день)
encrypted_session_expires 3600; # в сек
location /encrypt {
set $raw 'текст для шифрования'; # из модуля ngx_rewrite
set_encrypt_session $session $raw;
set_encode_base32 $session; # из модуля ngx_set_misc
add_header Set-Cookie 'my_login=$session'; # из модуля ngx_headers
# ваш обработчик контента здесь...
}
location /decrypt {
set_decode_base32 $session $cookie_my_login; # из модуля ngx_set_misc
set_decrypt_session $raw $session;
if ($raw = '') {
# плохая сессия
}
# ваш обработчик контента здесь...
}
Описание
Этот модуль предоставляет поддержку шифрования и расшифровки для переменных nginx на основе AES-256 с Mac.
Этот модуль обычно используется с модулем ngx_set_misc и директивами стандартного модуля переписывания.
Этот модуль можно использовать для реализации простой авторизации пользователей и контроля доступа.
Обычно вы просто расшифровываете данные на уровне nginx и передаете расшифрованные данные на ваш бэкенд FastCGI/HTTP, как в
location /blah {
set_decrypt_session $raw_text $encrypted;
# эта директива из модуля 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;
}
Веб-приложения на Lua, работающие напрямую на ngx_lua, могут вызывать директивы этого модуля прямо из кода Lua:
local raw_text = ndk.set_var.set_decrypt_session(encrypted_text)
Директивы
encrypted_session_key
синтаксис: encrypted_session_key <key>
по умолчанию: нет
контекст: http, server, server if, location, location if
Устанавливает ключ для шифрования (должен быть длиной 32 байта). Например,
encrypted_session_key "abcdefghijklmnopqrstuvwxyz123456";
encrypted_session_iv
синтаксис: encrypted_session_iv <iv>
по умолчанию: encrypted_session_iv "deadbeefdeadbeef";
контекст: http, server, server if, location, location if
Устанавливает начальный вектор, используемый для шифрования (не должен быть длиннее 16 байт).
Например,
encrypted_session_iv "12345678";
encrypted_session_expires
синтаксис: encrypted_session_expires <time>
по умолчанию: encrypted_session_expires 1d;
контекст: http, server, server if, location, location if
Устанавливает разницу времени истечения (по умолчанию в секундах).
Например, рассмотрим следующую конфигурацию:
encypted_session_expires 1d;
Когда ваша сессия создается, ngx_encrypted_session будет устанавливать время истечения (1 день в будущем в этом примере) в зашифрованную строку сессии, так что когда сессия будет расшифрована позже, сервер сможет извлечь время истечения из сессии и сравнить его с текущим системным временем сервера. Независимо от того, как вы переводите и храните свою сессию, используя cookies, или URI query параметры, или что-либо другое.
Люди могут путать эту настройку с датой истечения HTTP cookies. Эта директива просто контролирует, когда сессия истекает; она ничего не знает о HTTP cookies. Даже если конечный пользователь сам перехватил эту сессию из cookie и использует ее позже вручную, сервер все равно отклонит ее, когда время истечения пройдет.
set_encrypt_session
синтаксис: set_encrypt_session $target <value>
по умолчанию: нет
контекст: http, server, server if, location, location if
Шифрует строковое значение, указанное аргументом value, и сохраняет результат в
переменной, указанной $target.
Например,
set_encrypt_session $res $value;
защитит значение в переменной $value в целевой переменной $res.
Аргумент value также может быть строковым значением nginx, например,
set_encrypt_session $res "my value = $value";
Результирующие данные позже могут быть расшифрованы при помощи директивы set_decrypt_session.
set_decrypt_session
синтаксис: set_decrypt_session $target <value>
по умолчанию: нет
контекст: http, server, server if, location, location if
Похоже на set_encrypt_session, но выполняет обратную операцию, то есть, расшифровывает данные.