openjdk 1.8.0的java PSQLException握手失败\u 312b07
我正在11.9版中运行postgresql数据库,我能够连接到该数据库并使用以下代码执行sql语句:
Class.forName("org.postgresql.xa.PGXADataSource");
String jdbcConnection = "jdbc:postgresql://localhost:64000/db?user=foo&password=nope&ssl=true&sslmode=require&sslfactory=org.postgresql.ssl.NonValidatingFactory";
conn = DriverManager.getConnection(jdbcConnection);
请注意:由于这仅适用于本地测试环境,我完全可以使用非验证工厂,并且不需要SSL验证
将jdk更新到以下位置后:
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (IcedTea 3.21.0) (build 1.8.0_312-b07 suse-27.66.1-x86_64)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
我总是遇到这样的例外:
org.postgresql.util.PSQLException: SSL error: Received fatal alert: handshake_failure
at org.postgresql.ssl.MakeSSL.convert(MakeSSL.java:43)
at org.postgresql.core.v3.ConnectionFactoryImpl.enableSSL(ConnectionFactoryImpl.java:446)
at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:140)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:197)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:217)
at org.postgresql.Driver.makeConnection(Driver.java:458)
at org.postgresql.Driver.connect(Driver.java:260)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:270)
问题: 如何更改代码,以便能够在不降级JDK或更改postgres设置的情况下再次连接到数据库
可能有帮助的其他信息:
- 我的postgres实例支持这些密码:
SELECT distinct version, cipher FROM pg_stat_ssl;
TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384
TLSv1.3,TLS_AES_256_GCM_SHA384
- 我已经看到openjdk 1.8.0ĸ中默认的java密码套件有一些变化: https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/rev/f60ef263eb92
# 1 楼答案
公平地说,这并不能完全回答这个问题,但我目前认为这实际上是IcedTea openjdk中的一个bug:
我将jdk更改为:
到
它又开始工作了