【问题标题】:"HostName not verified error message" on SSL connection in postgresqlpostgresql 中 SSL 连接上的“主机名未验证错误消息”
【发布时间】:2018-05-03 09:26:08
【问题描述】:

我在 Centos 7 上创建了 server.crtserver.keyroot.crt 文件,并将它们放在 Windows 中的 C:\Users\xxxx\AppData\Roaming\postgresql 文件夹中,因为我在 Windows 上运行 postgresql 服务器。现在在使用 SSL 运行我的应用程序时,我收到错误为

“无法验证主机名”

请帮忙。

【问题讨论】:

  • 您是否在客户端使用 JDBC 驱动程序?如果没有,还有什么?
  • 是的,我正在使用 JDBC 驱动程序

标签: postgresql ssl ssl-certificate


【解决方案1】:

我正在使用 JetBrains Data Grip 访问 Heroku 上的 Postgres dbs,并且在最新的 JDBC 驱动程序版本中遇到了同样的错误。这就是我解决它的方法(使用此处提供的答案)。

在“高级”选项卡中设置以下内容:

ssl=true

sslmode=要求

sslfactory=org.postgresql.ssl.NonValidatingFactory

(我将sslmode 的值从verify-ca 更新为required,因为它现在可以与Heroku Postgres 一起使用)

【讨论】:

  • 是的,“sslmode=verify-ca”很重要。 jetbrains.com 上的官方文档没有提及。
  • 实际上,如果您在服务器上使用自签名证书,sslmode=require 是可行的方法。
  • @LaurenzAlbe 我同意。我现在检查了 sslmode=required 与 Heroku 的合作。所以,我认为保持它是必需的更好的答案,这样它就可以涵盖自签名证书。谢谢。
  • 在 sslmode 中应该是 'require' 而不是 'required'。您的图片显示正确,但您的答案有错别字。
【解决方案2】:

如果您不关心主机名验证但仍想使用证书,您可以使用附加参数sslmode=verify-ca 作为连接参数或作为 URL 的一部分来禁用主机名验证,同时保留证书验证。

【讨论】:

  • 有趣的是,即使未选中“使用 SSL”也能正常工作
【解决方案3】:

要在没有服务器证书验证的情况下使用 PostgreSQL JDBC 驱动程序,请使用

sslfactory=org.postgresql.ssl.NonValidatingFactory

作为连接参数或作为the documentation 中所述的 URL 的一部分。

使用更高版本的 JDBC 驱动程序,您必须指定

sslmode=require

因为默认值verify-full表示客户端要检查服务器的证书和身份。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 2014-03-21
    • 2015-10-18
    • 1970-01-01
    • 2019-04-08
    相关资源
    最近更新 更多