在jdbc Postgres驱动程序中`ssl`和`useSSL`有什么区别?

时间:2018-03-20 18:15:42

标签: java postgresql maven ssl liquibase

我正在尝试设置一个头盔图,其中使用SSL是一个参数,您传递给连接字符串以运行迁移,并且在理解jdbc postgres的ssluseSSL参数时遇到问题连接字符串。

jdbc SSL客户端的文档:https://jdbc.postgresql.org/documentation/91/ssl-client.html(谈论ssl标志)

我的命令如下:

command:
- mvn
- process-resources
- -PdbUpdate
- -Ddb.url=jdbc:postgresql://${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}?loginTimeout=1&ssl=VARIABLE
- -Ddb.username=${DATABASE_USERNAME}
- -Ddb.password=${DATABASE_PASSWORD}
- -Dliquibase.contexts=prod

非SSL连接

如果我将ssl=false的连接字符串传递给没有SSL的postgres数据库,我会收到以下错误:

[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.5.1:update (dbUpdate) on project exchange-api-metadata-db-migrations:\
Error setting up or running Liquibase: liquibase.exception.DatabaseException: org.postgresql.util.PSQLException: The connection attempt failed. sun.security.validator.ValidatorException: PKIX path building failed:\
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target -> [Help 1]

似乎它正在尝试查找证书,但如果sslfalse,则不确定为什么会这样做。

连接字符串:jdbc:postgresql://${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}?loginTimeout=1&ssl=false

如果不使用ssl=false,我会使用useSSL=true,然后就可以了。

SSL连接

如果我使用useSSL=true作为同一命令,那么

[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.5.1:update (dbUpdate) on project exchange-api-metadata-db-migrations:\
Error setting up or running Liquibase: liquibase.exception.DatabaseException: org.postgresql.util.PSQLException:\
FATAL: no pg_hba.conf entry for host "10.244.83.14", user "stolon", database "exchange-api-metadata-db", SSL off -> [Help 1]

基本上,它似乎仍然没有真正使用SSL进行连接。

连接字符串:jdbc:postgresql://${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}?loginTimeout=1&useSSL=true

如果不使用useSSL=true,我会使用ssl=true,然后就可以了。

jdbc postgresql驱动程序中ssluseSSL之间有什么区别? (我在useSSL上找不到任何文档) 我应该经常通过两面旗帜吗?如果我只想使用一个模板变量,那么传递两个标志是否有问题?

我目前的猜测是ssl用于尝试在系统中查找证书,而useSSL用于通过安全端口与默认端口连接到数据库。

1 个答案:

答案 0 :(得分:1)

  1. 请您澄清pgjdbc版本。我建议将pgjdbc升级到当前版本(例如,升级到42.2.2)
  2. useSSL从未被视为连接参数。该属性基本上被忽略
  3. sslmode属性可能会更好运(见https://jdbc.postgresql.org/documentation/head/connect.html)。它取代了ssl属性,并为您配置连接提供了灵活性

      

    sslmode可能的值包括disablerequireverify-caverify-fullallowprefer

  4. 相关代码为https://github.com/pgjdbc/pgjdbc/blob/REL42.2.2/pgjdbc/src/main/java/org/postgresql/core/v3/ConnectionFactoryImpl.java#L98

  5. 你也可以从https://github.com/pgjdbc/pgjdbc/blob/REL42.2.2/pgjdbc/src/test/java/org/postgresql/test/ssl/SslTest.java#L67启发