Назад | Перейти на главную страницу

ssl на postgres

Я пытаюсь настроить свой сервер postgres для ssl-соединений. Я правильно настроил postgresql.conf и pg_hba.conf. Я создал ключ и самозаверяющий сертификат (server.crt и server.key) в каталоге данных postgres и скопировал server.crt в root.crt.

Я также установил сертификат и ключ на другом хосте, используя root.crt с сервера, чтобы подписать сертификат клиента. Когда я использую openssl для проверки сертификата, все в порядке. Однако, когда я пытаюсь подключиться к серверу postgres, он терпит неудачу:

psql -h <HOSTNAME> -U <USER> -d <DB>
psql: SSL error: certificate verify failed

Альтернативно:

openssl s_client -connect <HOSTNAME>:5432 -state -msg -showcerts -debug
CONNECTED(00000003)
SSL_connect:before/connect initialization
write to 080ACFE0 [080AD570] (145 bytes => 145 (0x91))
0000 - 80 8f 01 03 01 00 66 00-00 00 20 00 00 39 00 00   ......f... ..9..
...
0080 - 04 fd be bd 49 e7 1d 99-f5 bb 7e 24 2e fe 34 e8   ....I.....~$..4.
0090 - d7                                                .
>>> SSL 2.0 [length 008f], CLIENT-HELLO
    01 03 01 00 66 00 00 00 20 00 00 39 00 00 38 00
    ...
    be bd 49 e7 1d 99 f5 bb 7e 24 2e fe 34 e8 d7
SSL_connect:SSLv2/v3 write client hello A
read from 080ACFE0 [080B2AD0] (7 bytes => 0 (0x0))
18357:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:226:

Наконец, если я настроил openssl для обслуживания на стороне сервера и подключения с клиентского хоста, он будет работать нормально:

openssl s_client -connect <HOSTNAME>:4433 -state -msg -showcerts -debug

Есть идеи, почему postgres отказывается от моих сертификатов? Для моих текущих настроек сервером является FreeBSD 4.7 с postgres 8.1, а клиентом - CentOS 4 с postgres 9.0. Не уверен, что это здесь влияет ...

PostgreSQL не начинает согласование SSL до тех пор, пока вы не отправите пакет с указанием сделать это. s_client ожидает, что он выполнит SSL перед этим пакетом. Видеть http://www.postgresql.org/docs/9.0/static/protocol-flow.html#AEN84524 для документации о том, как SSL работает в PostgreSQL.

Дважды проверьте, что ваш корневой сертификат находится в правильном месте на клиенте, и что он правильно читается postgres. Возможно, до того, что запустил strace, чтобы убедиться, что он действительно прочитан. это самая частая причина того, что что-то не работает.

И, как уже отмечалось ранее, вам следует как можно скорее отказаться от 8.1, поскольку срок ее службы уже истек. Но это не должно иметь на это большого влияния.

Удаление моего старого ~ / .postgresql решило проблему для меня. Пробовать strace psql для проверки open звонки.