PostgreSQL仅允许SSL连接配置失效问题求助
PostgreSQL仅允许SSL连接配置不生效问题解决
问题背景
Windows环境下的PostgreSQL服务器已配置为仅接受SSL连接,但实际测试中:
- C#的npgsql连接符合预期,强制要求SSL
- DBeaver等工具看似可选择“非SSL”连接,且所有连接日志均显示SSL已启用,与SSL连接日志完全一致
当前配置信息
pg_hba.conf 完整配置
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all md5 # IPv4 local connections: hostnossl all all all reject hostssl all all 0.0.0.0/0 md5 #hostssl all Sa|vA@Dat1 0.0.0.0/0 trust #host all all 127.0.0.1/32 password # IPv6 local connections: #host all all ::1/128 password # Allow replication connections from localhost, by a user with the # replication privilege.
postgresql.conf SSL相关配置
# - SSL - ssl = on #ssl_ca_file = '' ssl_cert_file = 'server.crt' #ssl_crl_file = '' ssl_key_file = 'server.key' #ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers #ssl_prefer_server_ciphers = on #ssl_ecdh_curve = 'prime256v1' #ssl_min_protocol_version = 'TLSv1.2' #ssl_max_protocol_version = '' #ssl_dh_params_file = '' #ssl_passphrase_command = '' #ssl_passphrase_command_supports_reload = off
异常日志信息
无论选择SSL还是“非SSL”连接,日志均输出相同内容:
connection authorized: user=xxxxx database=postgres SSL enabled (protocol=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384, bits=256, compression=deactivated)
解决方案
1. 修复本地连接的SSL强制规则
pg_hba.conf中的local规则对应Windows命名管道连接,当前规则未强制SSL,导致本地工具可通过命名管道绕过SSL限制:
- 若PostgreSQL版本≥12,将
local规则替换为localssl,强制命名管道连接使用SSL:# "local" is for Unix domain socket connections only localssl all all md5 - 若版本<12,直接注释
local规则,强制所有连接走TCP/IP并受SSL规则约束:# "local" is for Unix domain socket connections only #local all all md5
2. 完善hostnossl规则覆盖所有地址
将原hostnossl all all all reject拆分为IPv4和IPv6的明确规则,避免地址匹配歧义:
hostnossl all all 0.0.0.0/0 reject hostnossl all all ::/0 reject
3. 重启PostgreSQL服务
修改配置后必须重启PostgreSQL服务,确保新配置生效。
4. 验证工具连接逻辑
注意:多数数据库工具中的“禁用SSL”选项实际是禁用SSL证书验证,而非不建立SSL连接。当服务器设置ssl=on时,PostgreSQL会强制所有TCP连接使用SSL,客户端无法绕过。验证时需确认工具是否真的尝试建立非SSL连接,而非仅跳过证书验证。
内容的提问来源于stack exchange,提问作者Modest
相关产品推荐
相关产品推荐

