Ssl

PostgreSQL SSL root.crt 未載入

  • May 16, 2011

我在 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

到底是怎麼回事?我需要做什麼才能載入此證書???

權限沒問題。我有工作:

-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。可能您將證書放在 config 目錄中。

要以 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

引用自:https://serverfault.com/questions/248522