十二月 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 中看到的,我们现在必须将sslcert
、sslkey
和sslrootcert
添加到连接 URI 中。这些证书用于在数据库之间执行身份验证。这并不意味着不再需要密码。服务器应该提供为用户设置的密码,以便成功连接。