Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / HOW TO: SSL/TLS между pgBouncer и клиентом pgAdmin4 / 1 сообщений из 1, страница 1 из 1
05.07.2019, 15:55
    #39834412
korva
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HOW TO: SSL/TLS между pgBouncer и клиентом pgAdmin4
Код: plaintext
 Debian 9.6, PostgreSQL 11.4, pgBouncer 1.10 

Делаем ключи пользуясь вот этой статьёй https://www.howtoforge.com/postgresql-ssl-certificates и кучей догадок и озарений


Все действия по созданию ключей и сертификатов выполняются в каталоге /etc/pgbouncer из под рута
Названия файлов можно менять произвольно

1) Создаём закрытый ключ (просит ввести пароль - вводим):
Код: plaintext
openssl genrsa -aes256 -out root.key 4096

2) Удаляем пароль из получившегося ключа (просит введённый в п.1 пароль - вводим):
Код: plaintext
openssl rsa -in root.key -out root.key

3) Создаём сертификат на базе ключа (лично я в поле CN указал IP-адрес сервера, на всякий пожарный):
Код: plaintext
openssl req -new -key root.key -days 36500 -out root.crt -x509 -subj '/C=RU/ST=Moscow/L=Moscow/O=CompanyName/CN=192.168.0.2/emailAddress=username@mailserver.ru'

4) Создаём закрытый ключ клиента для клиентской машины (просит ввести пароль - вводим):
Код: plaintext
openssl genrsa -aes256 -out pgbclient.key 4096

5) Удаляем пароль из получившегося ключа (просит введённый в п.4 пароль - вводим):
Код: plaintext
openssl rsa -in pgbclient.key -out pgbclient.key

6) Создаём сертификат, НЕ указываем пароль пользователя в соответствующем поле 'extra', CN должен содержать имя пользователя базы данных
Код: plaintext
1.
openssl req -new -key pgbclient.key -out pgbclient.tmp -subj '/C=RU/ST=Moscow/L=Moscow/O=CompanyName/CN=dbusername/emailAddress=username@mailserver.ru'

7) Подписываем сертификат пользователя корневым сертификатом созданным в п.3
Код: plaintext
openssl x509 -req -in pgbclient.tmp -CA root.crt -CAkey root.key -out pgbclient.crt -CAcreateserial

8) Права доступа, удаление лишнего:
Код: plaintext
chmod 400 root.*
Код: plaintext
chown postgres.postgres root.*
Код: plaintext
chmod 400 pgbclient.*
Код: plaintext
rm pgbclient.tmp

9) Прописываем настройки в /etc/pgbouncer/pgbouncer.ini:
Код: plaintext
client_tls_sslmode = allow
Код: plaintext
client_tls_key_file = /etc/pgbouncer/root.key
Код: plaintext
client_tls_cert_file = /etc/pgbouncer/root.crt
;; Если сделать следующий параметр равным tlsv1.3 то счастья вам не будет
Код: plaintext
server_tls_protocols = tlsv1.2

10) Список получившихся файлов "ls -l":
Код: plaintext
-r-------- 1 root     root     1989 мес  1 00:00 pgbclient.crt
Код: plaintext
-r-------- 1 root     root     3277 мес  1 00:00 pgbclient.key
Код: plaintext
-rw-r--r-- 1 root     root     9157 мес  1 00:00 pgbouncer.ini
Код: plaintext
-r-------- 1 postgres postgres 2136 мес  1 00:00 root.crt
Код: plaintext
-r-------- 1 postgres postgres 3543 мес  1 00:00 root.key
Код: plaintext
-r-------- 1 postgres postgres 3543 мес  1 00:00 root.srl
Код: plaintext
-rw-r--r-- 1 root     root      243 мес  1 00:00 userlist.txt

11) Копируем pgbclient.crt, pgbclient.key, root.crt на локальную машину в домашний каталог, или туда где собираемся хранить сертификаты

12) На локальной машине добавляем root.crt в папку pgAdmin4 /home/username/.pgadmin
сервер pgAdmin4 перезапускать не надо.

13) Добавление корневого сертификата в список доверенных состоит из двух этапов:
13.1 копируем сертификат в специальное место:
Код: plaintext
cp /etc/pgbouncer/root.crt /usr/share/ca-certificates/mozilla
13.2 выполняем команду
Код: plaintext
dpkg-reconfigure ca-certificates
откроется окно в котором нужно будет выбрать вариант "спрашивать" или "ask" (от локали зависит)
затем откроется список сертификатов лежащих в той папке,куда копировали наш корневой сертификат
его в этом списке находим (у него нет звездочки слева) ставим ему звездочку и щелкаем ок
эту процедуру необходимо выполнить как на сервере, так и на клиентской машине иначе:
Unable to connect to server:
ошибка SSL: tlsv1 alert unknown ca

14) рестартуем боунсера:
Код: plaintext
systemctl restart pgbouncer

15) Создаем в веб-интерфейсе pgAdmin4 новый сервер, указываем его адрес, имя пользователя, пароль, и, на вкладке "SSL" три файла (два сертификата и один ключ).
по названиям полей в которых нужно указывать где лежат файлы вполне понятно что куда писать.

Я делал ключи и сертификаты на сервере, потому что там у меня стоит аппаратный генератор случайных чисел и конфиги ssl поправлены на использование пула случайных чисел. Не уверен что у всех есть такое счастье (не такое уж и дорогое, кстати), так что можете делать на рабочей машине и копировать на сервер.
Также в дебиан есть пакет для генерации случайных чисел на основе колдунства. https://ivirt-it.ru/linux-kernel-rng/
У кого-то может быть не установлен пакет ca-certificates - установите, он нужен в п.13
Ключи пользователя с сервера можно удалять после того как убедитесь что подключение к БД устанавливается, а можно не удалять - вдруг отзывать придётся (как это делается - не знаю)

Не знаю кто как, а я с этим провозился весь день.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / HOW TO: SSL/TLS между pgBouncer и клиентом pgAdmin4 / 1 сообщений из 1, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]