SSL-сертификаты · 2 min read · Dec 15, 2025

SSL сертификаты для PostgreSQL

SSL сертификаты для PostgreSQL

Это описание того, как настроить ssl сертификаты для включения зашифрованных соединений от PgAdmin на клиентском компьютере к postgresql на серверном компьютере. Предполагается, что postgresql (собранный с поддержкой ssl) и openssl уже установлены и функционируют на сервере (Linux). PgAdmin уже установлен на клиенте (либо Windows, либо Linux).

На сервере требуется три сертификата в каталоге данных. Значение по умолчанию для CentOS - /var/lib/pgsql/data/:
root.crt (доверенный корневой сертификат)
server.crt (серверный сертификат)
server.key (закрытый ключ)

Выдавайте команды от имени root.

sudo -
cd /var/lib/pgsql/data

Сгенерируйте закрытый ключ (вы должны предоставить пароль).

openssl genrsa -des3 -out server.key 1024

Удалите пароль.

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

Установите соответствующие разрешения и владельца для файла закрытого ключа.

chmod 400 server.key  
chown postgres.postgres server.key

Создайте серверный сертификат.
-subj является сокращением, чтобы избежать запроса информации.
-x509 создает самоподписанный сертификат, а не запрос на сертификат.

openssl req -new -key server.key -days 3650 -out server.crt -x509 -subj '/C=CA/ST=British Columbia/L=Comox/O=TheBrain.ca/CN=thebrain.ca/[email protected]'

Поскольку мы создаем самоподписанный сертификат, мы используем серверный сертификат в качестве доверенного корневого сертификата.

cp server.crt root.crt

Вам нужно будет отредактировать pg_hba.conf. Например:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local" предназначен только для соединений через сокеты Unix
local   all         all                               trust
# IPv4 локальные соединения:
host    all         all         127.0.0.1/32          trust  
  
# IPv4 удаленные соединения для аутентифицированных пользователей
hostssl all         www-data    0.0.0.0/0             md5 clientcert=1  
hostssl all         postgres    0.0.0.0/0             md5 clientcert=1

Вам нужно отредактировать postgresql.conf, чтобы фактически активировать ssl:

ssl = on

Сервер PostgreSQL должен быть перезапущен.

/etc/init.d/postgresql restart

Если сервер не удается (пере)запустить, посмотрите в журнал запуска postgresql, /var/lib/pgsql/pgstartup.log по умолчанию для CentOS, чтобы узнать причину.

На клиенте нам нужно три файла. Для Windows эти файлы должны находиться в каталоге %appdata%\postgresql. Для Linux в каталоге ~/.postgresql/.
root.crt (доверенный корневой сертификат)
postgresql.crt (клиентский сертификат)
postgresql.key (закрытый ключ)

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

Сначала создайте закрытый ключ postgresql.key для клиентского компьютера и удалите пароль.

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

Затем создайте сертификат postgresql.crt. Он должен быть подписан нашим доверенным корнем (который использует файл закрытого ключа на серверном компьютере). Также общее имя сертификата (CN) должно быть установлено на имя пользователя базы данных, под которым мы будем подключаться.

openssl req -new -key /tmp/postgresql.key -out /tmp/postgresql.csr -subj '/C=CA/ST=British Columbia/L=Comox/O=TheBrain.ca/CN=www-data'
openssl x509 -req -in /tmp/postgresql.csr -CA root.crt -CAkey server.key -out /tmp/postgresql.crt -CAcreateserial

Скопируйте три файла, которые мы создали, из каталога /tmp/ сервера на клиентский компьютер.

Скопируйте доверенный корневой сертификат root.crt с серверного компьютера на клиентский компьютер (для Windows pgadmin %appdata%\postgresql\ или для Linux pgadmin ~/.postgresql/). Измените разрешение файла postgresql.key, чтобы ограничить доступ только для вас (возможно, это не нужно на Windows, так как ограниченный доступ уже унаследован). Удалите файлы из каталога /tmp/ на сервере.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.