我正在尝试设置一个Helm图表,其中使用SSL是传递给连接字符串以运行迁移的参数,并且在理解jdbc postgres连接字符串的ssl
和useSSL
参数时遇到问题。
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
可能的值包括disable
,require
,verify-ca
和verify-full
,allow
和prefer
相关代码为https://github.com/pgjdbc/pgjdbc/blob/REL42.2.2/pgjdbc/src/main/java/org/postgresql/core/v3/ConnectionFactoryImpl.java#L98
您也可以从https://github.com/pgjdbc/pgjdbc/blob/REL42.2.2/pgjdbc/src/test/java/org/postgresql/test/ssl/SslTest.java#L67中获得启发