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

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

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

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

-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/{clustername}), а не в каталог конфигурации (/etc/postgresql/9.0/{clustername}).

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

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

Чтобы потребовать от клиента предоставить доверенный сертификат, поместите сертификаты центров сертификации (ЦС), которым вы доверяете, в файл 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