以 SSL 模式連線到 PostgreSQL
Shihab Sikder
2022年6月13日
當我們嘗試連線資料庫時,Postgres 使用 SSL 來驗證連線的安全性。它在 HTTP 中預設禁用,但在 HTTPS 中,我們需要連線的 SSL 模式才能在 Postgres 資料庫中執行任何操作。
如果連線不是私有的,則可以有多個攻擊引數。任何人都可以通過資料庫請求-響應輕鬆地使用嗅探工具。
PostgreSQL 中有哪些 SSL 模式
Postgres 提供了不同型別的 SSL 模式。首先,讓我們看一下 Postgres 的通用連線字串。
const connectionString = "postgres://<database_username>:<database_userpassword>@<hostaddress>:<port_no>/<database_name>"
現在,我們可以新增引數 sslmode
,如下所示。
const connectionString = "postgres://<database_username>:<database_userpassword>@<hostaddress>:<port_no>/<database_name>?sslmode=<ssl_mode>"
這是 Postgres 提供的 SSL 模式列表。
sslmode |
竊聽保護 | 中間人保護 | 描述 |
---|---|---|---|
disable |
不 | 不 | 它不會關心安全性。不會加密任何資料。 |
allow |
也許 | 不 | 它不會關心安全性並加密連線。 |
prefer |
也許 | 不 | 它不會強制使用加密;如果伺服器支援加密的開銷,那麼它將加密。 |
require |
是的 | 不 | 加密資料,它會面臨一些加密的開銷,而網路可以確保使用者想要連線到正確的伺服器。 |
verify-ca |
是的 | 取決於 CA 政策 | 加密資料,加密的開銷並始終連線到受信任的伺服器。 |
verify-full |
是的 | 是的 | 資料將被加密,使用者接受開銷,網路和伺服器都是受信任的,並且只連線到被詢問的特定伺服器。 |
你也可以在環境變數中設定此標誌。
PGSSLMODE=verify-full PGSSLROOTCERT=ca.pem
在這裡,ca.pem
是關鍵。你需要從 CA 收集它; CA 代表證書頒發機構。
要使用 Postgres SSL 模式完全配置伺服器,你可以按照 this blog 中的步驟操作。
這是 Postgres 官方文件中關於 SSL 模式的說明。
Using NULL-SHA or NULL-MD5 ciphers, authentication can be done without any encryption overhead. A man-in-the-middle, on the other hand, might read and pass communications between the client and the server. In addition, as compared to the overhead of authentication, encryption has a low overhead. NULL ciphers are not recommended for these reasons.
此外,你可以檢視官方文件此處。他們展示瞭如何在使用 SSL 模式時對證書進行自簽名。
Author: Shihab Sikder