PostgreSQL SSL root.crt не загружается

Я использую PostgreSQL 9 в Ubuntu (из их репозитория PPA). Я использую OpenSSL 0.9.8o.

Я сгенерировал ключи и сертификаты, используя TinyCA2 для сервера pg и клиента psql. Я по сути следовал инструкциям.

Мой файл pg_hba.conf настроен так:

 hostssl all             abc             ::1/128              cert        clientcert=1

Я поместил корневой сертификат, сгенерированный TinyCA, вместе с сертификатом и ключом сервера в каталог DATA следующим образом.

sudo unzip database_server.zip
sudo mv sudo mv cacert.pem root.crt
sudo mv cert.pem server.crt
sudo openssl rsa -in key.pem -out server.key
sudo chmod 0600 server.key
sudo chmod ga=r root.crt
sudo chown postgres:postgres root.crt server.key server.crt

Я не могу запустить сервер. Вот что я получаю при запуске:

$ sudo /etc/init.d/postgresql start 9.0
* Starting PostgreSQL 9.0 database server
* The PostgreSQL server failed to start. Please check the log output:
  2011-03-17 16:39:13 IST LOG:  client certificates can only be checked if a root certificate store is available
  2011-03-17 16:39:13 IST HINT:  Make sure the root.crt file is present and readable.
  2011-03-17 16:39:13 IST CONTEXT:  line 93 of configuration file "/etc/postgresql/9.0/main/pg_hba.conf"
  2011-03-17 16:39:13 IST FATAL:  could not load pg_hba.conf

Интересно, что файл root.crt присутствует и доступен для чтения:

$ ll
<snip>
-rw-r--r-- 1 postgres postgres  143 2010-12-01 17:06 pg_ctl.conf
-rw-r----- 1 postgres postgres 4.3K 2011-03-17 16:35 pg_hba.conf
-rw-r----- 1 postgres postgres 1.7K 2011-03-17 15:58 pg_ident.conf
-rw-r--r-- 1 postgres postgres  18K 2011-02-07 18:38 postgresql.conf
-rw-r--r-- 1 postgres postgres 2.8K 2011-03-17 16:39 root.crt
-rw------- 1 postgres postgres 2.2K 2011-03-17 14:37 server.crt
-rw------- 1 postgres postgres  891 2011-03-17 16:18 server.key
-rw------- 1 postgres postgres  963 2011-03-17 14:37 server.key.encrypted

Что здесь происходит? Что я должен сделать для загрузки этого сертификата???

1 ответ

Решение

Разрешения в порядке. У меня работает:

-rw-r--r--  1 postgres postgres  615 2011-04-25 16:23 root.crt
-rw-------  1 postgres postgres  692 2011-04-25 17:20 server.crt
-rw-------  1 postgres postgres  887 2011-04-25 17:17 server.key

Попробуйте поместить эти файлы в каталог данных (/var/lib/postgresql/9.0/ enjclustername}), а не в каталог конфигурации (/etc/postgresql/9.0/ enjclustername}).

Когда кластер создан, автоматически предоставляются snakeoil server.key и server.crt в каталоге данных, но нет root.crt. Вероятно, вы положили свои сертификаты в каталог конфигурации.

Для запуска в режиме SSL файлы server.crt и server.key должны существовать в каталоге данных сервера. Эти файлы должны содержать сертификат сервера и закрытый ключ соответственно. Если закрытый ключ защищен парольной фразой, сервер запросит парольную фразу и не запустится, пока она не будет введена.

Чтобы требовать от клиента предоставления доверенного сертификата, поместите сертификаты центров сертификации (CA), которым вы доверяете, в файл root.crt в каталог данных.

В Ubuntu:

cat /etc/postgresql/9.0/main/postgresql.conf | grep data_dir
data_directory = '/var/lib/postgresql/9.0/main' # use data in another directory
Другие вопросы по тегам