?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
PostgreSQL有一個內(nèi)建的通過SSL進(jìn)行加密的客戶端/服務(wù)器端的通訊, 這樣可以增加安全性。這個特性要求在客戶端和服務(wù)器端都安裝OpenSSL 并且在編譯PostgreSQL的時候打開(參閱Chapter 15)。
當(dāng)編譯了SSL進(jìn)去以后,可以通過將postgresql.conf中的 ssl設(shè)置為on打開PostgreSQL服務(wù)器的SSL支持。 服務(wù)器在同一個TCP端口監(jiān)聽通常和SSL的連接,將判斷客戶端連接是否使用SSL。 缺省,這是在客戶端的選項(xiàng);參閱Section 19.1關(guān)于如何設(shè)置服務(wù)器要求部分或全部連接使用SSL。
PostgreSQL讀取系統(tǒng)范圍的OpenSSL配置文件。缺省,這文件名為openssl.cnf opensslversion-d報告所在的目錄。通過設(shè)置環(huán)境變量OPENSSL_CONF指定你想要的配置文件名可以覆蓋此缺省配置。
OpenSSL支持多種不同強(qiáng)度的加密和認(rèn)證算法。 而在OpenSSL配置文件可以指定一個密碼列表, 你可以通過在postgresql.conf中修改ssl_ciphers, 指定數(shù)據(jù)庫服務(wù)器使用的專用密碼。
Note: 使用NULL-SHA或NULL-MD5可能有身份驗(yàn)證開銷而沒有加密開銷。 不過,中間人能夠讀取和通過客戶端和服務(wù)器的通信。此外,加密開銷相比身份認(rèn)證的開銷是最小的。 有這些原因建議不使用NULL加密。
要SSL模式中啟動服務(wù)器,server.crt和server.key必須存在服務(wù)器的數(shù)據(jù)目錄里. 這些文件應(yīng)分別包含服務(wù)器證書和私鑰。在Unix系統(tǒng),server.key的權(quán)限禁止任何world或group訪問; 通過命令chmod0600server.key來做。如果私鑰受密碼保護(hù),服務(wù)器將會提示輸入密碼,將會等到輸入后啟動。
在有些情況下,服務(wù)器證書可能由一個"中間"認(rèn)證授權(quán)簽名,而不是直接由受信任的客戶端。 若要使用這樣的證書,請追加授權(quán)簽名證書到theserver.crt文件,然后其父頒發(fā)機(jī)構(gòu)的證書, 等到一個可信任的客戶端的"根"授權(quán)。server.crt包含多個證書,在任何情況下應(yīng)包括根證書。
需要客戶端提供受信任的證書,證書頒發(fā)機(jī)構(gòu)的地方證書(CAs) 你信任的在數(shù)據(jù)目錄下的root.crt文件,并且在pg_hba.conf相應(yīng)hostssl行, 設(shè)置參數(shù)clientcert為1。 然后將在SSL連接啟動時從客戶端請求該證書。(見Section 31.17描述了如何設(shè)置客戶端證書。) 服務(wù)器將驗(yàn)證客戶端的證書是由受信任的證書頒發(fā)機(jī)構(gòu)之一簽名。證書撤銷清單(CRL)如果存在root.crl 文件,也要檢查。 (見http://h71000.www7.hp.com/DOC/83final/BA554_90007/ch04s02.html圖表顯示SSL證書的使用。)
在pg_hba.conf文件中clientcert選項(xiàng)對于所有的認(rèn)證方法都可用,但僅適用hostssl指定的行。 當(dāng)clientcert沒有指定或設(shè)置為0,如果存在root.crt仍然阻止客戶端證書, 但它不會堅(jiān)持提交客戶端證書。
請注意root.crt列出頂級的客戶端證書,認(rèn)為是受信任的客戶端證書簽名。 原則上不需要列出服務(wù)器簽名的客戶端證書,然而在大多數(shù)情況下,這些證書也是受信任的客戶端證書。
如果你設(shè)置客戶端證書,你可能希望用cert認(rèn)證方法,因此使證書控制用戶身份驗(yàn)證,以及提供連接安全。參閱Section 19.3.9獲取詳細(xì)信息。
server.key,server.crt, root.crt,和root.crl這些文件僅在服務(wù)器啟動時檢查; 所以你改變它們必須重啟服務(wù)器生效。
Table 17-3. 使用SSL服務(wù)器文件
File | Contents | Effect |
---|---|---|
server.crt | 服務(wù)器證書 | 發(fā)送到客戶端標(biāo)識服務(wù)器的身份 |
server.key | 服務(wù)器私鑰 | 證明是發(fā)送服務(wù)器證書的所有者,并不表示證書所有者是可信的 |
root.crt | 受信任的頒發(fā)機(jī)構(gòu)證書 | 檢查該客戶端證書由受信任的證書頒發(fā)機(jī)構(gòu)簽署 |
root.crl | 由證書頒發(fā)機(jī)構(gòu)吊銷的證書 | 客戶端證書不能在此列表中 |
創(chuàng)建自簽名的證書,可以使用下面的OpenSSL命令:
opensslreq-new-text-outserver.req
填充那些openssl向你詢問的信息。 確保把本地主機(jī)名當(dāng)做"CommonName"輸入;挑戰(zhàn)密碼可以留空。 該程序?qū)⑸梢话延每诹畋Wo(hù)的密鑰。小于四字符的 口令保護(hù)是不被接受的。要移去密鑰(如果你想自動啟動服務(wù) 器就得這樣),運(yùn)行下面的命令:
opensslrsa-inprivkey.pem-outserver.key rmprivkey.pem
輸入舊口令把現(xiàn)有密鑰解鎖。然后:
opensslreq-x509-inserver.req-text-keyserver.key-outserver.crt
要將一個證書變成自簽名證書的,并將復(fù)制它們的密鑰和證書到服務(wù)器能找到的地方。最后執(zhí)行操作:
chmodog-rwxserver.key
因?yàn)?,服?wù)器將拒絕該文件,如果其權(quán)限是比這更多自由。更多關(guān)于怎樣創(chuàng)建你的服務(wù)器私鑰和證書, 請參考OpenSSL文檔。
自簽名的證書可以用于測試,但證書是應(yīng)使用由證書頒發(fā)機(jī)構(gòu)簽署(CA)(要么是全局CAs中的一個或者一個本地的) 產(chǎn)生的,因此客戶端可以驗(yàn)證服務(wù)器的身份。如果如果所有客戶都是本地組織的,建議使用本地CA。