PostgreSQL SSL root.crt不加载

我在Ubuntu上运行PostgreSQL 9(从他们的PPA仓库)。 我正在使用OpenSSL 0.9.8o。

我已经为pg服务器和psql客户端生成了使用TinyCA2的密钥和证书。 我基本上遵循指示 。

我的pg_hba.conf文件configuration为:

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})中,而不是config目录(/etc/postgresql/9.0/{clustername))。

当创build集群时,会自动在数据目录中提供snakeoil server.key和server.crt,但是没有root.crt。 可能你把你的证书放在config目录下。

要以SSL模式启动,server.crt和server.key文件必须存在于服务器的数据目录中。 这些文件应分别包含服务器证书和私钥。 如果私钥使用密码保护,则服务器将提示input密码,直到input密码才会启动。

要求客户端提供可信证书,请将您信任的证书颁发机构(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