3.5. 在 PostgreSQL 服务器上配置 TLS 加密
默认情况下,PostgreSQL 使用未加密的连接。对于更安全的连接,您可以对 PostgreSQL 服务器启用传输层安全(TLS)支持,并将客户端配置为建立加密连接。
先决条件
- 您创建了 TLS 私钥,证书认证机构(CA)为您的 PostgreSQL 服务器发布了一个服务器证书。
- PostgreSQL 服务器已安装。
- 数据库集群已初始化。
- 如果启用了 FIPS 模式,客户端必须支持 Extended 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/
# cp server.{key,crt} /var/lib/pgsql/data/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置私钥和证书的所有权:
chown postgres:postgres /var/lib/pgsql/data/server.{key,crt}
# chown postgres:postgres /var/lib/pgsql/data/server.{key,crt}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对只允许 PostgreSQL 服务器读取文件的服务器证书设置权限:
chmod 0400 /var/lib/pgsql/data/server.key
# chmod 0400 /var/lib/pgsql/data/server.key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 由于证书是建立安全连接前通信的一部分,因此任何客户端都可以在不需要身份验证的情况下检索它们。因此,您不需要对服务器证书文件设置严格的权限。
编辑
/var/lib/pgsql/data/postgresql.conf
文件并进行以下更改:设置
scram-sha-256
哈希算法:password_encryption = scram-sha-256
password_encryption = scram-sha-256
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用 TLS 加密:
ssl = on
ssl = on
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
编辑
/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
hostssl all all 192.0.2.0/24 scram-sha-256
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
postgresql
服务:systemctl restart postgresql.service
# systemctl restart postgresql.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用
postgres
超级用户连接到 PostgreSQL 服务器,并执行\conninfo
元命令:psql "postgresql://postgres@localhost:5432" -c '\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)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow