温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

postgresql如何配置ssl

发布时间:2026-09-27 17:11:07 来源:亿速云 阅读:83 作者:小樊 栏目:数据库

下面按从生成证书到修改配置、验证连接的完整流程,说明 PostgreSQL 如何配置 SSL(以 Linux 环境、PostgreSQL 12+ 为例,其他版本大同小异)。


一、准备 SSL 证书

1. 生成自签名证书(测试环境)

# 生成私钥
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

2. 证书权限(非常重要)

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 配置

编辑 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)

编辑 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();

五、验证 SSL 是否生效

1. 服务器端查看

SHOW ssl;

返回 on 表示开启成功。

2. 客户端连接测试

psql "host=127.0.0.1 user=postgres sslmode=require"

查看连接是否加密:

SELECT ssl, version FROM pg_stat_ssl WHERE pid = pg_backend_pid();

六、客户端 SSL 模式说明(sslmode)

sslmode 说明
disable 不使用 SSL
require 必须 SSL(不验证证书)
verify-ca 验证 CA
verify-full 验证 CA + 主机名(最安全)

生产推荐:

sslmode=verify-full

七、常见问题

1. 启动报错

private key file must not be accessible by others

✅ 解决:

chmod 600 server.key

2. 连接被拒绝

  • 检查 listen_addresses
  • 检查防火墙
  • 检查 pg_hba.conf 是否允许 hostssl

八、生产环境建议

  • 使用 CA 签名证书
  • 客户端使用 verify-full
  • 定期更换证书
  • 禁用不安全协议(TLS 1.0/1.1)

如果你需要:

  • ✅ 使用 Let’s Encrypt
  • ✅ 配置 双向 SSL(客户端证书)
  • ✅ Docker / Kubernetes 中配置
  • ✅ Windows 环境配置

可以告诉我你的具体场景。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手