AWS RDS Postgres设置rds.force_ssl=1后非SSL连接仍可连通问题咨询
现象原因
该现象不属于配置遗漏,核心原因是PostgreSQL JDBC客户端的默认连接逻辑:当服务端开启rds.force_ssl=1强制要求SSL连接时,JDBC驱动会自动协商SSL连接,哪怕连接参数中没有显式配置SSL相关项,因此不会抛出连接错误,此时实际建立的已经是加密链路,并非非SSL连接。
连接加密状态验证
可以通过以下方式确认当前连接是否真的走SSL加密:
- 连接实例后执行SQL语句:
SELECT ssl, cipher, version FROM pg_stat_ssl WHERE pid = pg_backend_pid(); - 若返回结果中
ssl字段值为t,即代表当前连接为SSL加密状态,rds.force_ssl参数已经生效。
严格强制SSL连接的配置方案
如果需要彻底禁止任何非SSL连接尝试、同时避免自动协商SSL时的证书校验漏洞,按以下步骤配置即可:
- JDBC连接串显式指定SSL模式,禁止明文连接回退
连接串追加参数ssl=true&sslmode=verify-full:ssl=true:显式要求驱动必须使用SSL连接,不会尝试明文链路sslmode=verify-full:为最高安全等级的SSL模式,既强制要求SSL连接,还会校验服务端证书合法性、证书与连接域名的匹配性,杜绝中间人攻击风险
注意:不要使用
sslmode=require,该模式仅强制SSL但不校验服务端证书,存在安全隐患 - 配置RDS根证书信任
下载对应区域的RDS根证书,连接时通过sslrootcert参数指定证书本地路径,完整连接串示例如下:jdbc:postgresql://<RDS实例访问端点>:5432/<目标数据库名>?ssl=true&sslmode=verify-full&sslrootcert=<RDS根证书本地存储路径> - 配置完成后,若去掉所有SSL相关参数发起连接,会直接抛出连接拒绝错误,达到仅允许SSL连接的预期效果。
内容的提问来源于stack exchange,提问作者Siena
相关产品推荐
相关产品推荐

