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