16.7. 用 SSL 進行安全的 TCP/IP 聯接

PostgreSQL 有一個內建的通過 SSL 進行加密的客戶端/服務器端的通訊, 這樣可以增加安全性。這個特性要求在客戶端和服務器端都安裝 OpenSSL 並且在制作PostgreSQL的時候打開(參閱 Chapter 14)。

當編譯了SSL進去以後,可以通過設置 postgresql.conf 裡的參數 ssl 為 on 來打開 PostgreSQL 服務器的SSL支持。 當開始SSL模式後, 服務器將在數據目錄裡查找 server.key 文件和 server.crt 文件,應該分別包含服務器私鑰和證書。 在打開SSL的服務器運行之前必須先正確的設置這些文件。 如果私鑰用一個口令保護,那麼服務器將提示輸入口令,並且在口令成功校驗之前不會啟動。

服務器將在同一個 TCP 端口上同時監聽標準的和SSL的聯接, 並且將與任何正在聯接的客戶端進行協商,協商是否使用SSL。 參閱 Chapter 19 獲取如何強制服務器端只使用SSL進行某些聯接的信息。

有關創建你的服務器私鑰和證書的細節信息,你們可以參考 OpenSSL 的文檔。 你可以用一個簡單的自認證的證書進行初始測試, 但是在生產環境中應該使用一個由認證中心(CA)(全球的 CA或者區域的CA都可以)簽發的證書, 這樣客戶端才能夠識別服務器的身份。 要創建一份自認證的證書,可以使用下面的OpenSSL命令

openssl req -new -text -out server.req

填充那些openssl向你詢問的信息。 確保把本地主機名當做Common Name輸入。 該程序將生成一把用口令保護的密鑰。小于四字符的口令保護是不被接受的。 要移去密鑰(如果你想自動啟動服務器就得這樣),運行下面的命令

openssl rsa -in privkey.pem -out server.keyrm privkey.pem

輸入舊口令把現有密鑰解鎖。然後

openssl req -x509 -in server.req -text -key server.key -out server.crtchmod og-rwx server.key

把證書變成自簽名的證書,然後把秘鑰和證書拷貝到服務器尋找它們的地方。