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

JDBCPool与PgPool对接强制SSL的RDS PostgreSQL的异常行为疑问

问题1:未指定sslmode的JDBC风格URL为何可以正常连接

PostgreSQL官方JDBC驱动的默认sslmode取值为prefer,该模式的运行逻辑是:优先尝试发起SSL连接,连接成功就使用SSL链路,连接失败才降级为非SSL连接。
你遇到的不报错的原因有两个:

  • 你的RDS实例开启了rds.force_ssl,服务端允许SSL握手,驱动的SSL连接尝试可以正常完成
  • AWS RDS的服务端SSL证书由公共可信CA(目前为DigiCert)签发,Java运行环境自带的信任根证书库已经内置了对应CA的根证书,你不需要额外手动传入证书配置就能通过SSL校验,所以不会抛出证书相关的异常。

你测试中sslmode=disable会强制驱动使用非SSL连接,自然会被要求SSL的服务端拒绝;而allow/prefer/require/verify-ca/verify-full都能正常连通,也和该逻辑完全匹配——前三种模式都会尝试SSL连接,后两种校验模式因为RDS证书可被JRE默认信任库校验通过,也不会抛出异常。

问题2:非JDBC风格的PgPool写法为何符合预期抛出SSL错误,两者底层差异是什么

Vert.x提供的PgPool是自研的原生PostgreSQL客户端实现,和JDBCPool的底层依赖完全不同:

  • JDBCPool底层依赖PostgreSQL官方JDBC驱动,完全遵循官方驱动的SSL默认配置逻辑
  • PgPool的默认配置中SSL是完全关闭的,你没有主动调用setSsl(true)开启SSL的前提下,客户端根本不会发起SSL握手,直接走明文连接请求,自然会被服务端返回SSL off的错误,和你看到的日志完全吻合。

如果要让PgPool也能正常连接开启强制SSL的RDS实例,需要在PgConnectOptions中主动添加.setSsl(true)配置,如需开启证书校验还要额外配置信任证书路径。

内容的提问来源于stack exchange,提问作者Vaibhav Desai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:27:03