You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL启用强制SSL认证后仍可无证书远程连接的问题排查

PostgreSQL强制远程用户SSL认证但无需证书即可连接的问题

我尝试在PostgreSQL中对所有远程用户强制SSL认证,但目前仍无需提供证书即可连接。我的预期是启用强制SSL后,所有远程用户必须提供证书才能连接服务器。

当前配置

pg_hba.conf 配置

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     trust
host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             ::1/128                 scram-sha-256
hostssl all             all             0.0.0.0/0               scram-sha-256
hostssl all             all             ::/0                    scram-sha-256

postgresql.conf 配置

ssl = on
ssl_cert_file = '/var/lib/postgresql/14/main/server.crt'
ssl_key_file = '/var/lib/postgresql/14/main/server.key'
# ssl_ca_file = ''                       # 该配置未启用

测试情况

我通过以下命令仍能成功连接:

psql -h hostname -p 5432 -U postgres -d postgres --password

问题原因及解决方法

当前配置仅强制远程连接使用SSL加密传输,但并未要求客户端提供证书进行身份验证。要实现强制客户端证书认证,需调整以下配置:

  1. 修改 pg_hba.conf
    将远程连接的认证方式从 scram-sha-256 改为 cert,并添加 clientcert=1 参数强制要求客户端提供证书:
hostssl all             all             0.0.0.0/0               cert clientcert=1
hostssl all             all             ::/0                    cert clientcert=1
  1. 配置 postgresql.conf
    启用 ssl_ca_file,指定用于验证客户端证书的CA根证书路径(需提前将CA公钥文件放置对应路径):
ssl_ca_file = '/var/lib/postgresql/14/main/root.crt'
  1. 重启PostgreSQL服务
    修改配置后需重启服务使更改生效:
sudo systemctl restart postgresql
  1. 客户端连接要求
    客户端必须携带对应证书文件才能连接,示例命令:
psql -h hostname -p 5432 -U postgres -d postgres \
  --sslmode=verify-full \
  --sslrootcert=/path/to/root.crt \
  --sslcert=/path/to/client.crt \
  --sslkey=/path/to/client.key

内容的提问来源于stack exchange,提问作者Faheem Sultan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:25:42