PostgreSQL Конфигурация SSL - PullRequest
       23

PostgreSQL Конфигурация SSL

0 голосов
/ 15 февраля 2020

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

Получение сообщения об ошибке «Требуется действительный сертификат аутентификации»

Ниже postgres Каталог сервера БД

total 80
skipping unwanted directory
-rw-------. 1 postgres postgres  1285 Feb 13 20:16 rootCA.crt
-rw-------. 1 postgres postgres  1168 Feb 13 20:16 server.crt
-rw-------. 1 postgres postgres  1679 Feb 13 20:17 server.key

Ниже приведен postgresql .conf файл, относящийся к конфигурации SSL.

[postgres@munmvs2951 raj]$ cat postgresql.conf | grep ssl
ssl = on                                # (change requires restart)
ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers
#ssl_prefer_server_ciphers = on         # (change requires restart)
#ssl_ecdh_curve = 'prime256v1'          # (change requires restart)
#ssl_renegotiation_limit = 512MB        # amount of data between renegotiations
ssl_cert_file = 'server.crt'            # (change requires restart)
ssl_key_file = 'server.key'             # (change requires restart)
ssl_ca_file = 'rootCA.crt'                      # (change requires restart)
#ssl_crl_file = ''                      # (change requires restart)

Ниже приведен файл pg_hba.

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                trust
#host    replication     postgres        127.0.0.1/32            trust
#host    replication     postgres        ::1/128                 trust
#secure client
hostssl  postgres       postgres        clientip/32               md5 clientcert=1

Ниже приведен клиентская PostgreSQL домашняя директория пользователя, откуда psql будет подключаться к серверу.

[postgres@clinet ~]$ ll
total 32
-rw------- 1 postgres postgres 1168 Feb 15 10:27 client.crt
-rw------- 1 postgres postgres  989 Feb 15 10:27 client.csr
-rw------- 1 postgres postgres 1285 Feb 15 11:47 rootCA.crt
-rw------- 1 postgres postgres 1675 Feb 15 11:47 rootCA.key
-rw------- 1 postgres postgres   17 Feb 15 11:47 rootCA.srl
-rw------- 1 postgres postgres 1168 Feb 15 11:47 server.crt
-rw------- 1 postgres postgres  989 Feb 15 11:47 server.csr
-rw------- 1 postgres postgres 1679 Feb 15 11:47 server.key
[postgres@client ~]$ pwd
/home/postgres

при подключении, ошибка ниже.

[postgres@client ~]$ /opt/PostgresPlus/9.4AS/bin/psql -U postgres -p5443 -hserverip
psql.bin: FATAL:  connection requires a valid client certificate
FATAL:  no pg_hba.conf entry for host "10.80.x.x", user "postgres", database "postgres", SSL off

Однако Я могу получить доступ без clientcert = 1 в файле pg_hba.

Ref:

[postgres@client ~]$ /opt/PostgresPlus/9.4AS/bin/psql -U postgres -p5443 -hserverip
psql.bin (9.4.1.3)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

postgres=#

В вышеупомянутом успешном соединении, я думаю, проверка ssl только на стороне сервера, а не на стороне клиента.

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

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 15 февраля 2020

См. https://www.postgresql.org/docs/current/libpq-ssl.html

Ниже находится клиентская PostgreSQL домашняя директория пользователя, откуда psql будет подключаться к серверу

Они не принадлежат домашнему каталогу, они принадлежат подкаталогу домашнего каталога с именем .postgresql. Или в Windows, в каталоге с именем "%APPDATA% \ postgresql". И файл rootCA.crt должен называться root.crt, если только вы не попытались изменить имя / местоположение в конфигурации на стороне клиента, что, как вам кажется, не было сделано (вы изменили его на сервере сторона, но это не меняет его на стороне клиента). И client.crt должен быть назван postgresql.crt, и вам не хватает файла ключа для него. И тот факт, что у вас есть файл с именем rootCA.key в каталоге клиента, пугает, никто, кроме ЦС, не должен иметь к этому доступа.

...