以 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