PostgreSQL SSL root.crt 未加载

PostgreSQL SSL root.crt 未加载

我在 Ubuntu 上运行 PostgreSQL 9(来自其 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/{clustername})中,而不是配置目录(/etc/postgresql/9.0/{clustername})。

创建集群时,数据目录中会自动提供 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

相关内容