Как подключиться к серверу PostgreSQL, используя зашифрованный пароль - PullRequest
0 голосов
/ 21 марта 2019

В обычных сценариях строка подключения содержит пароль в виде обычного текста, но Wireshark может перехватить его, поэтому я хочу использовать зашифрованный пароль в строке подключения.Я нашел приведенную ниже выдержку из документации Postgres:

Шифрование паролей в сети Метод аутентификации MD5 дважды шифрует пароль на клиенте перед его отправкой на сервер.Сначала он шифрует MD5 на основе имени пользователя, а затем шифрует на основе случайной соли, отправляемой сервером при установлении соединения с базой данных.Именно это значение с двойным шифрованием отправляется по сети на сервер.Двойное шифрование не только предотвращает обнаружение пароля, но также не позволяет другому соединению использовать тот же зашифрованный пароль для подключения к серверу базы данных в более позднее время.

Если я правильно понял,чтобы получить соль, мне нужно подключиться к базе данных, но разве это не означает, что пароль может быть подделан?

Я пытался поискать в Google, но не нашел удовлетворительного решения.Я хочу понять, как я могу получить случайную соль с сервера PostgreSQL, используя java, а затем зашифровать ее простым паролем и использовать зашифрованный пароль для установления соединения.

1 Ответ

1 голос
/ 21 марта 2019

Если вы, пользователь arvind, установите пароль на secret, пароль фактический будет установлен на

'md5' || md5('secret' || 'arvind')

то есть md50624d6c2e831004efb7f4173699a1775. Это то, что вы найдете в системном каталоге pg_authid.

Теперь установление соединения работает следующим образом:

клиент к серверу: Я хочу подключиться к базе данных mydb как пользователь arvind.

сервер-клиент: Хорошо, я хочу аутентификацию MD5. Ваша соль g73j.

Клиенту присвоено secret в качестве пароля.

Во-первых, он использует приведенную выше формулу для получения реального пароля (первое хеширование).

Затем клиент хэширует пароль второй раз, используя

'md5' || md5('0624d6c2e831004efb7f4173699a1775' || 'g73j')

клиент на сервер: хешированный пароль md573ae1f550fb4bcd28411cefb24b800bc.

Сервер вычисляет тот же хэш и сравнивает результат с тем, что он получил от клиента.

Если это то же самое, сервер знает, что у клиента должен быть настоящий пароль, иначе он не смог бы вычислить правильный хеш.

Сам пароль не передается, поэтому он не может быть украден перехватчиком.

сервер-клиент: Хорошо, вы в сети.

Реальные сообщения, конечно, выглядят по-разному, но это все в документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...