有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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设置的情况下再次连接到数据库

可能有帮助的其他信息

  1. 我的postgres实例支持这些密码:
SELECT distinct version, cipher FROM pg_stat_ssl;
TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384
TLSv1.3,TLS_AES_256_GCM_SHA384
  1. 我已经看到openjdk 1.8.0ĸ中默认的java密码套件有一些变化: https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/rev/f60ef263eb92

共 (1) 个答案

  1. # 1 楼答案

    公平地说,这并不能完全回答这个问题,但我目前认为这实际上是IcedTea openjdk中的一个bug:

    我将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)
    

    openjdk version "1.8.0_312"
    OpenJDK Runtime Environment (Temurin)(build 1.8.0_312-b07)
    OpenJDK 64-Bit Server VM (Temurin)(build 25.312-b07, mixed mode)
    

    它又开始工作了