通过 JDBC 连接到 postgres 服务器时 sslmode 参数的默认值?
Posted
技术标签:
【中文标题】通过 JDBC 连接到 postgres 服务器时 sslmode 参数的默认值?【英文标题】:default for sslmode argument while connection to postgres server through JDBC? 【发布时间】:2020-08-13 03:27:34 【问题描述】:我们正在通过 jdbc 和 psql (libpq) 连接到 postgres 服务器。我已将 ssl 设置为在 postgres 服务器上。它可以采用 ssl 和非 ssl 连接。 我通过 psql 客户端与 postgres 服务器建立了连接,并且可以确认默认的 sslmode(在建立连接时未提供 sslmode 参数时)是“首选”。请注意,我没有在 psql 的连接字符串中提供 sslmode 参数。仍然连接是安全的
psql "postgresql://$POSTGRES_HOST:$PG_PORT/postgres" -U postgres
psql (9.6.18, server 9.6.12)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help
。 这意味着prefer 是psql 的默认sslmode。 我在 AWS 文档中阅读了 jdbc 连接到服务器的默认模式是“verify-full”。我通过不向连接字符串提供 sslmode 来创建到 postgres 服务器的 jdbc 连接。传递“verify-ca”和“verify-full”无法连接到 postgres 服务器,没有发现证书异常。连接成功。我只是想确认当 ssl 打开服务器时 jdbc 连接到 postgres 服务器的默认 sslmode 是什么。我认为它应该要求或低于。
【问题讨论】:
为什么 AWS 会记录 JDBC,除非它是 AWS 特定的实现?你能提供一个链接吗? 我正在考虑将 SSL 添加到 AWS 中的 Aurora Postgres 服务。这是文档链接docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/… 请查看“通过 SSL 连接到 Aurora PostgreSQL 数据库集群”部分。具体部分如下: 基于 libpq 的客户端(例如 psql)和 JDBC 使用的默认 sslmode 模式不同。基于 libpq 的客户端默认为首选,而 JDBC 客户端默认为 verify-full。 AWS 文档掩盖了真实行为。仅当您指定ssl=true
时,默认的 sslmode 设置为 verify-full 才适用。如果您既没有设置ssl=true
也没有设置sslmode
,则JDBC 的行为就像sslmode=prefer,与libpq 一样。
谢谢,我意识到为 ssl 配置客户端意味着将 ssl 参数设置为 true。但是 postgresql 站点中是否有关于此的特定文档。另外,当这两个参数都没有设置时,我们如何测试以发现 sslmode 是首选
【参考方案1】:
JDBC 驱动程序的默认设置是使用sslmode
或verify-full
。
The documentation 说:
有许多用于为 SSL 配置客户端的连接参数。见SSL Connection parameters
最简单的是 ssl=true,将其传递给驱动程序将导致驱动程序验证 SSL 证书并验证主机名(与 verify-full 相同)。请注意,这与默认为非验证 SSL 连接的 libpq 不同。
【讨论】:
看起来默认的 sslmode 没有验证完整。这是我做的测试。创建了一个简单的程序来使用 jdbc 连接到数据库服务器(ssl 已打开)。如果我没有在连接 url 字符串中传递 sslmode,我可以连接。如果我在下面提供任何 sslmode 并且与 "require" 相同,我就会连接。如果我使用“verify-ca”或“verify-full”我会得到一个例外,因为我没有将根证书导入到 trustore。现在,如果“verify-full”是默认行为,当我没有将 sslmode 参数传递给连接字符串时,我应该会遇到相同的异常 真;我记得 JDBC 客户端的旧行为。我用当前信息更新了答案。 @LaurenzAlbe 可能是您想要但最终没有更新答案吗?还是说默认是verify-full
是的,这是默认的(与libpq不同,默认不验证服务器证书)。以上是关于通过 JDBC 连接到 postgres 服务器时 sslmode 参数的默认值?的主要内容,如果未能解决你的问题,请参考以下文章
使用 JDBC 连接到 postgres 时是不是可以指定模式?
在同一局域网中通过 JDBC 连接到 Postgres 服务器时出现 PSQLException(PGAdmin 工作)
使用 Databricks 连接到 AWS Postgres