PostgreSQL 教程: 启用 SSL 证书认证

十二月 14, 2023

摘要:在本教程中,您将学习如何在 PostgreSQL 中启用 SSL 证书身份验证。

为了获得安全性增强,您可能希望使用 SSL 证书启用证书身份验证。在启用后,每个客户端连接都需要通过一次额外的证书交换进行身份验证。为此,需要使用一个客户端证书来标识客户端。你需要将客户端证书复制到远程服务器(或应用程序服务器),才能使用此方法。在本教程中,我们将讨论启用 SSL 证书身份验证所涉及的步骤。

准备工作

为了启用 SSL,我们必须具有由 CA 签名的服务端和客户端证书文件。这通常由大多数组织中的安全团队执行。管理员可以使用 OpenSSL 生成证书。

操作步骤

我们将使用以下步骤,启用证书身份验证:

1. 将 CA 签名的客户端证书复制到远程服务器:

$ scp postgresql.crt postgresql.key rootCA.crt postgres@192.168.130.1:/var/lib/postgresql

在远程服务器上,修改证书的权限:

$ chmod 0400 postgresql.crt postgresql.key rootCA.crt

2. 修改数据库服务器上pg_hba.conf文件中的认证方法,开启证书认证:

$ vi $PGDATA/pg_hba.conf
hostssl postgres postgres 192.168.130.1 cert clientcert=1

3. 执行重新加载,以使更改生效:

$ psql -c "select pg_reload_conf()"

4. 使用客户端证书,从远程主机验证连接认证:

$ psql "host=192.168.130.70 user=postgres port=5432 sslcert=postgresql.crt sslkey=postgresql.key sslrootcert=rootCA.crt"

这将产生以下输出:

$ psql "host=192.168.130.70 user=postgres port=5432 sslcert=postgresql.crt sslkey=postgresql.key sslrootcert=rootCA.crt"
Password for user postgres:
psql (12.4 (Ubuntu 12.4-1.pgdg18.04+1))
Type "help" for help.
postgres=#

怎么做到的…

要启用 SSL 证书认证,还需要将客户端证书复制到远程服务器或应用程序服务器,从这里发起的连接将使用此认证方式。复制后,唯一需要对pg_hba.conf文件的更改(如步骤 2 所示)是,必须将身份验证模式替换为cert clientcert=1。完成此操作后,我们可以发出重新加载以使更改生效,并验证来自远程服务器的连接。正如您在步骤 4 中看到的,我们现在必须将sslcertsslkeysslrootcert添加到连接 URI 中。这些证书用于在数据库之间执行身份验证。这并不意味着不再需要密码。服务器应该提供为用户设置的密码,以便成功连接。