jdbc Postgres 驱动程序中的 `ssl` 和 `useSSL` 有什么区别?
What is the difference between `ssl` and `useSSL` in jdbc Postgres driver?
我正在尝试设置一个 helm chart,其中使用 SSL 是您传递给连接字符串的参数以进行 运行 迁移并且在理解 ssl
和 useSSL
jdbc postgres 连接字符串的参数。
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]
它似乎在尝试查找证书,但不确定如果 ssl
是 false
时为什么要这样做。
连接字符串: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 驱动中的ssl
和useSSL
有什么区别? (我找不到关于 useSSL
的任何文档)
我应该总是通过两个标志吗?如果我只想使用一个模板变量,传递两个标志会有问题吗?
我目前的猜测是 ssl
用于尝试在系统中查找证书,useSSL
用于通过安全端口而不是默认端口连接到数据库。
- 如您所问,请说明pgjdbc版本。我建议将 pgjdbc 升级到当前版本(例如升级到 42.2.2)
useSSL
从未被视为连接参数。这个属性基本忽略
sslmode
属性 你可能运气更好(见 https://jdbc.postgresql.org/documentation/head/connect.html )。它取代了 ssl
属性 并在您配置连接的方式上提供了灵活性
sslmode
possible values include disable
, require
, verify-ca
and verify-full
, allow
and prefer
- 您也可以从 https://github.com/pgjdbc/pgjdbc/blob/REL42.2.2/pgjdbc/src/test/java/org/postgresql/test/ssl/SslTest.java#L67 中获得灵感
我正在尝试设置一个 helm chart,其中使用 SSL 是您传递给连接字符串的参数以进行 运行 迁移并且在理解 ssl
和 useSSL
jdbc postgres 连接字符串的参数。
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]
它似乎在尝试查找证书,但不确定如果 ssl
是 false
时为什么要这样做。
连接字符串: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 驱动中的ssl
和useSSL
有什么区别? (我找不到关于 useSSL
的任何文档)
我应该总是通过两个标志吗?如果我只想使用一个模板变量,传递两个标志会有问题吗?
我目前的猜测是 ssl
用于尝试在系统中查找证书,useSSL
用于通过安全端口而不是默认端口连接到数据库。
- 如您所问,请说明pgjdbc版本。我建议将 pgjdbc 升级到当前版本(例如升级到 42.2.2)
useSSL
从未被视为连接参数。这个属性基本忽略sslmode
属性 你可能运气更好(见 https://jdbc.postgresql.org/documentation/head/connect.html )。它取代了ssl
属性 并在您配置连接的方式上提供了灵活性sslmode
possible values includedisable
,require
,verify-ca
andverify-full
,allow
andprefer
- 您也可以从 https://github.com/pgjdbc/pgjdbc/blob/REL42.2.2/pgjdbc/src/test/java/org/postgresql/test/ssl/SslTest.java#L67 中获得灵感