通过 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 驱动程序的默认设置是使用sslmodeverify-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

如何通过 Spark 中的 jdbc 连接到 docker 托管的 postgresql 数据库?

如何将 obiee 连接到 postgres 数据库?

通过 JDBC 连接到 PostgreSQL - NetworkOnMainThreadException [重复]