Как шифруются пароли в PgBouncer
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Шифрование паролей в PgBouncer
В PgBouncer пароли шифруются с использованием механизма SCRAM (Salted Challenge Response Authentication Mechanism) — это современный и безопасный протокол аутентификации, который пришёл на смену устаревшему MD5. PgBouncer, выступая в роли прокси-сервера между клиентами и PostgreSQL, поддерживает несколько методов аутентификации, но для шифрования паролей в своей конфигурации он использует хеширование по типу PostgreSQL.
Основные механизмы
- SCRAM-SHA-256: Наиболее безопасный метод. Пароль никогда не передаётся в открытом виде, используется соль (salt) и множество итераций хеширования, что защищает от перебора и атак по словарю.
- MD5: Устаревший, но поддерживается для обратной совместимости. PgBouncer хранит хеш MD5, но для подключения к PostgreSQL может использовать как MD5, так и SCRAM, в зависимости от настроек сервера.
- Plaintext: Пароль передаётся в открытом виде, используется только при подключении через SSL/TLS или в доверенных сетях.
Конфигурация шифрования
Пароли пользователей PgBouncer задаются в файле userlist.txt или динамически через SQL. В userlist.txt пароли хранятся в виде хешей, аналогичных тем, что используются в PostgreSQL.
Пример userlist.txt
"user1" "scram-sha-256|ENCODED_PASSWORD_HASH"
"user2" "md5|ENCODED_MD5_HASH"
Здесь: -RANDOM_SALT` — случайная соль.
STORED_KEYиSERVER_KEY— производные ключи, используемые в процессе аутентификации.
Как создаётся хеш для SCRAM
Хеш для SCRAM-SHA-256 можно сгенерировать с помощью утилиты pgBouncer или через PostgreSQL.
Использование pgBouncer
pgbouncer -M -p ваш_пароль
Эта команда сгенерирует строку вида scram-sha-256|..., которую можно поместить в userlist.txt.
Использование PostgreSQL
SELECT pg_catalog.scram_build('ваш_пароль');
Процесс аутентификации с SCRAM
- Клиент подключается к PgBouncer, отправляет имя пользователя.
- PgBouncer находит в userlist.txt хеш и отправляет клиенту соль и количество итераций.
- Клиент вычисляет доказательство знания пароля, используя пароль, соль и итерации.
- PgBouncer проверяет доказательство, сверяя с хранимым ключом.
- При успехе PgBouncer выполняет аналогичный процесс с PostgreSQL, если сервер требует SCRAM.
Важные моменты
We can choose between unidirectional TLS and mutual TLS. Unidirectional is for internal communication where we just encrypt the traffic. Mutual TLS (mTLS) is for zero-trust networks.