2013-03-12 64 views
4

早上好,與Postgres安全的TCP連接?需要SSL嗎?

我正在通過Postgresql配置文件,最近發現有一個ssl選項。我想知道這是什麼時候需要的。

說出是否有應用程序服務器和數據庫服務器 - 不在專用網絡中運行。如果用戶嘗試登錄,如果SSL未啓用,則應用服務器在查詢其是否有效的用戶名/密碼時,將明文中的用戶密碼傳輸到數據庫?

這是什麼標準做法?我應該設置我的數據庫來使用SSL嗎?

如果是這樣,那麼在我的Rails應用程序中,config/database.yml中的連接設置是否有區別?

謝謝!

+0

@Wooble顯然這是一個人爲的例子。有多種原因希望加密應用程序服務器和數據庫之間的流量,即使使用散列密碼也是如此。不幸的是,你的評論沒有絲毫有用。 – Brandon 2013-03-12 16:56:55

回答

6

像其他協議索姆鏈接,使用SSL/TLS對PostgreSQL允許您以確保客戶端與服務器之間的連接。您是否需要它取決於您的網絡環境。

沒有SSL/TLS,竊聽者可以看到客戶端和服務器之間的流量:所有的查詢和響應,以及可能的密碼,取決於您配置pg_hba.conf(是否the client is using md5 or a plaintext password)的方式。

據我所知,it's the server that requests MD5 or plaintext password authentication,所以當不使用SSL/TLS時,一個活躍的中間人攻擊者可以降級並獲取密碼。

一個配置良好的SSL/TLS連接應該能夠防止密碼和數據的竊聽和MITM攻擊。

您可以要求使用SSL在服務器端使用sslhostpg_hba.conf,但這只是問題的一部分。最終,just like for web servers,這完全取決於客戶端驗證SSL,並且它與正確的服務器一起使用。

Table 31-1 in the libpq documentation總結了您獲得的保護級別。

本質:

  • ,如果你認爲你有一個理由使用SSL,disableallowprefer是無用的(不帶「否」或「也許」,如果你想安全)。
  • require幾乎沒有用,因爲它根本不驗證遠程服務器的身份。
  • verify-ca不驗證主機名,這使得它易受MITM攻擊。

如果安全問題給您的是verify-full你想要的。

這些SSL模式名稱由libpq設置。其他客戶端可能不會使用相同的(例如純Ruby實現或JDBC)。

據我所知,ruby-pg依賴於libpq。不幸的是,它only lists "disable|allow|prefer|require" for its sslmode。如果直接傳遞,也許verify-full也可以工作。但是,還需要一種配置CA證書的方法。

+0

感謝您的有用答案,直接回答了我的問題! – Brandon 2013-03-12 16:59:19

+0

「*如果用戶嘗試登錄,如果SSL未啓用,則應用服務器將以明文*傳輸用戶密碼」,我還應該說我指的是PostgreSQL用戶,它通常與應用程序用戶不同(應用程序用戶可能指的是作爲數據存儲在數據庫中的東西:這是安全的是不同的事情)。 – Bruno 2013-03-12 17:05:36

0

考慮密碼以外的數據。如果你使用或不是我幾乎是一個安全態勢問題。你需要你的系統有多安全?如果連接剛好在您的私人網絡上,那麼您在該網絡上的任何人都可以列出來。如果不接受使用SSL的情況,我就不啓用它。如果連接正常,則應啓用互聯網SSL。

正如@Wooble所說。您不應該首先將密碼作爲明文發送出去。在這種情況下,stanard解決方案是將散列存儲在數據庫中,並僅發送散列以進行驗證。

Here是關於軌道部分