Перейти к содержанию

encrypted-session: Шифрование и расшифровка значений переменных NGINX

Установка на Debian/Ubuntu

Эти документы относятся к APT пакету nginx-module-encrypted-session, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте репозиторий APT, как описано в настройке репозитория APT.
  2. Установите модуль:
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, но выполняет обратную операцию, то есть, расшифровывает данные.

Смотрите Также