Ssl
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
到底是怎麼回事?我需要做什麼才能載入此證書???
權限沒問題。我有工作:
-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