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 1024openssl 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/ на сервере.
Get new posts in your inbox
No spam. Unsubscribe anytime.