PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

18.9. 利用 SSL 进行安全 TCP/IP 连接 #

18.9.1. 基础配置
18.9.2. 使用客户端证书认证
18.9.3. OpenSSL 协议与密码套件配置
18.9.4. 服务端 SSL 证书文件规范
18.9.5. 自签名证书快速创建

PostgreSQL 原生支持利用基于 OpenSSL 驱动的 TLS 协议对客户端与服务端之间的网络通信实施全局强加密传输,防止会话流量在链路上被窃听篡改。

18.9.1. 基础配置 #

在配置文件 postgresql.conf 中将参数 ssl 设置为 on 即可激活服务端 TLS 监听:

ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'

服务端私钥文件 server.key 的权限在 Unix 系统上必须严格限制为仅宿主属主可读(权限位必须设为 0600 或 0640),否则服务将拒绝启动。

在客户端认证配置文件 pg_hba.conf 中,将连接类型声明为 hostssl 可强制要求连接必须走加密通道,直接拒绝对明文连接的响应。

18.9.2. 使用客户端证书认证 #

除了账号口令之外,还可以配置双向证书认证(Mutual TLS,mTLS)。通过配置 ssl_ca_file 并在 pg_hba.conf 中声明 clientcert=verify-full,服务端在握手时会强制校验客户端提供的数字证书,并要求证书的主题通用名称(Common Name,CN)必须与登录用户名相符,实现军事级安全的无密码客户端认证。

18.9.3. OpenSSL 协议与密码套件配置 #

可以通过 ssl_min_protocol_version 和 ssl_ciphers 强制要求客户端使用 TLSv1.3 以及高安全强度的密码套件。

18.9.4. 服务端 SSL 证书文件规范 #

服务端 SSL 证书(server.crt)与私钥(server.key)存放于数据目录中,私钥文件权限必须严格设为 0600。

Table 18.2. SSL 证书与密钥文件用途

文件名用途
server.crt服务端数字证书链
server.key服务端私钥文件(权限 0600)
root.crt受信任的客户端根 CA 证书

18.9.5. 自签名证书快速创建 #

在开发与测试环境中,可以使用 openssl 工具快速生成自签名证书与密钥:

openssl req -new -x509 -days 365 -nodes -text -out server.crt \
  -keyout server.key -subj "/CN=db.example.com"
chmod 0600 server.key