以 SSL 模式连接到 PostgreSQL

Shihab Sikder 2023年10月12日
以 SSL 模式连接到 PostgreSQL

当我们尝试连接数据库时,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 模式时对证书进行自签名。

作者: Shihab Sikder
Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website