Site icon Блог cyber01

Как создать/обновить SSL сертификаты для PostgreSQL

Понадобилось мне как-то создать новые сертификаты для сервера и раскидать их по клиентским серверам. Делалось для того, чтобы иметь защищенное соединение у PostgreSQL.

Приступим.

Следуюшими действиями мы сгенерируем сертификаты для PostgreSQL

Предположим, у вас уже установлена PostgreSQL(с ssl) и OpenSSL.

Для начала нужно сгенерировать 3 сертификата самого сервера.

Все команды мы будем выполнять от имени root (входить кто как привык sudo — или sudo -i)

Переходим в каталог с PostgreSQL

Для Gentoo:

cd /var/lib/postgresql/data/

Для CentOS:

cd /var/lib/pgsql/data

Далее, создадим закрытый ключ (server.key)

openssl genrsa -des3 -out server.key 1024

Далее, удалим пароль из ключа, чтобы не вводить его каждый раз:

openssl rsa -in server.key -out server.key

Установим необходимые права доступа и владельца файла

chmod 400 server.key

chown posgres.postgres server.key

Создадим сертификат сервера: (для параметра subj обязательны одинарные кавычки)

openssl req -new -key server.key -days 3650 -out server.crt -x509 -subj '/C=RU/ST=Moscow/L=M/O=MyBlabla/CN=pg server'

Этой командой мы создадим сертификат сроком действия 10 лет, сгенерированный для России (C), штата/города Москва (ST), организации MyBlabla, и сервера pg server

Т.к. это самоподписанный сертификат, сделаем его доверенным

cp server.crt root.crt

Далее отредактировать postgresql.conf, чтобы, активировать SSL:
ssl = on

После чего перезапускаем сервер

/etc/init.d/posgresql restart

Сервер может сразу и не запуститься, если он не запустился — смотрите логи и исправьте причину

На этом мы закончили генерацию серверного сертификата, но нам предстоит еще сгенерировать их для клиентов

Чтож, приступим.

Для клиента требуются следующие файлы:

root.crt (доверенный корневой сертификат)
postgresql.crt (сертификат сервера)
postgresql.key (закрытый ключ)

 

Мы будем генерировать их на сервере, например в каталог /tmp/

Сначала создадим закрытый ключ

openssl genrsa -des3 -out /tmp/postgresql.key 1024

Удалим из него пароль

openssl rsa -in /tmp/postgresql.key -out /tmp/postgresql.key

Создадим сертификат сервера (postgresql.crt)

openssl req -new -key /tmp/postgresql.key -out /tmp/postgresql.csr -subj '/C=RU/ST=Moscow/L=M/O=MyBlabla/CN=vasya'

Здесь нужно в параметре CN указать имя пользователя postgre, с именем которого мы подключаемся.

Создаем сам сертификат

openssl x509 -req -in /tmp/postgresql.csr -CA root.crt -CAkey server.key -days 3650 -out /tmp/postgresql.crt -CAcreateserial

Сертификат создается также на 10 лет (иначе на месяц)

С генерацией клиентских сертификатов завершили, теперь нужно скопировать их(3 файла указанные выше) на клиентские машины.

Для Windows:

%appdata%\postgresql\

Для Linux:

~/.postgresql/

 

P.S. обязательно проверьте (для Linux), чтобы у postgresql.key права доступа были 600

Exit mobile version