4.5. 在 PostgreSQL 服务器中配置 TLS 加密
默认情况下,PostgreSQL 使用未加密的连接。对于更安全的连接,您可以对 PostgreSQL 服务器启用传输层安全(TLS)支持,并将客户端配置为建立加密连接。
先决条件
- 您创建了 TLS 私钥,证书认证机构(CA)为您的 PostgreSQL 服务器发布了一个服务器证书。
- PostgreSQL 服务器已安装。
- 初始化数据库集群。
- 如果服务器运行 RHEL 9.2 或更高版本,并且启用了 FIPS 模式,则客户端必须支持扩展 Master Secret (EMS)扩展或使用 TLS 1.3。没有 EMS 的 TLS 1.2 连接会失败。如需更多信息,请参阅红帽知识库解决方案 在 RHEL 9.2 及更高版本上强制执行 TLS 扩展 "Extended Master Secret"。
流程
将私钥和服务器证书存储在
/var/lib/pgsql/data/目录中:# cp server.{key,crt} /var/lib/pgsql/data/设置私钥和证书的所有权:
# chown postgres:postgres /var/lib/pgsql/data/server.{key,crt}对只允许 PostgreSQL 服务器读取文件的服务器证书设置权限:
# chmod 0400 /var/lib/pgsql/data/server.key由于证书是建立安全连接前通信的一部分,因此任何客户端都可以在不需要身份验证的情况下检索它们。因此,您不需要对服务器证书文件设置严格的权限。
编辑
/var/lib/pgsql/data/postgresql.conf文件并进行以下更改:设置
scram-sha-256哈希算法:password_encryption = scram-sha-256启用 TLS 加密:
ssl = on
编辑
/var/lib/pgsql/data/pg_hba.conf文件,并更新身份验证条目,以使用 TLS 加密和scram-sha-256哈希算法。例如,将host条目改为hostssl以启用 TLS 加密,并在最后一列设置scram-sha-256哈希算法:hostssl all all 192.0.2.0/24 scram-sha-256重启
postgresql服务:# systemctl restart postgresql.service
验证
使用
postgres超级用户连接到 PostgreSQL 服务器,并执行\conninfo元命令:# psql "postgresql://postgres@localhost:5432" -c '\conninfo' Password for user postgres: You are connected to database "postgres" as user "postgres" on host "192.0.2.1" at port "5432". SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)