下面按从生成证书到修改配置、验证连接的完整流程,说明 PostgreSQL 如何配置 SSL(以 Linux 环境、PostgreSQL 12+ 为例,其他版本大同小异)。
# 生成私钥
openssl genrsa -out server.key 2048
# 生成证书请求
openssl req -new -key server.key -out server.csr \
-subj "/CN=postgres-server"
# 生成自签名证书
openssl x509 -req -in server.csr -signkey server.key -out server.crt -days 365
PostgreSQL 要求私钥不能被其他用户读取:
chmod 600 server.key
chown postgres:postgres server.key server.crt
将证书放到 PostgreSQL 数据目录(如 /var/lib/postgresql/15/main):
cp server.crt server.key $PGDATA
chown postgres:postgres $PGDATA/server.crt $PGDATA/server.key
编辑 postgresql.conf:
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
# 可选
# ssl_ca_file = 'root.crt'
# ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL'
编辑 pg_hba.conf,强制使用 SSL:
# 所有主机必须使用 SSL
hostssl all all 0.0.0.0/0 scram-sha-256
如果是测试,可暂时保留
host,但建议生产环境用hostssl
重新加载配置:
pg_ctl reload
# 或
SELECT pg_reload_conf();
SHOW ssl;
返回 on 表示开启成功。
psql "host=127.0.0.1 user=postgres sslmode=require"
查看连接是否加密:
SELECT ssl, version FROM pg_stat_ssl WHERE pid = pg_backend_pid();
| sslmode | 说明 |
|---|---|
| disable | 不使用 SSL |
| require | 必须 SSL(不验证证书) |
| verify-ca | 验证 CA |
| verify-full | 验证 CA + 主机名(最安全) |
生产推荐:
sslmode=verify-full
private key file must not be accessible by others
✅ 解决:
chmod 600 server.key
listen_addressespg_hba.conf 是否允许 hostsslverify-full如果你需要:
可以告诉我你的具体场景。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。