Я запускаю 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