当前位置: 首页 > 知识库问答 >
问题:

JDBC到mysql 5.7.21与java 1.8.0_162;不支持的记录版本未知0.0

孙渝
2023-03-14

我试图连接到mysql与JDBC。我在Windows 10上生成的密钥如下:

winpty openssl pkcs12 -export -inkey ssl_cert/client-key.pem -in ssl_cert/client-cert.pem -out client.packet

keytool -importkeystore -deststorepass <password> -destkeypass <password> -destkeystore mysqldb.jks -srckeystore client.packet -srcstoretype PKCS12 -srcstorepass <password> -alias 1 

keytool -importcert -alias mysqlCA -trustcacerts -file ssl_cert/ca.pem -keystore mysqldb.jks 

我的JDBC代码如下所示:

System.setProperty("javax.net.ssl.trustStore", "ks-production-mysqldb.jks");
            System.setProperty("javax.net.ssl.trustStorePassword", "<password> ");
            System.setProperty("javax.net.ssl.trustStoreType", "JKS");

            System.setProperty("javax.net.ssl.keyStore", "mysqldb.jks");
            System.setProperty("javax.net.ssl.keyStorePassword", "<password> ");
            System.setProperty("javax.net.ssl.keyStoreType", "JKS");

            String dbURL = "jdbc:mysql://localhost:1234/sb?"
            + "verifyServerCertificate=true&useSSL=true&requireSSL=true";
conn = DriverManager.getConnection(dbURL, dbUser, dbPass);

我得到以下错误:

原因:javax。网ssl。SSLexException:sun上不支持的记录版本未知-0.0。安全ssl。InputRecord。在sun上检查RecordVersion(InputRecord.java:552)。安全ssl。InputRecord。sun上的readV3Record(InputRecord.java:565)。安全ssl。InputRecord。在sun上阅读(InputRecord.java:529)。安全ssl。SSLSocketImpl。sun上的readRecord(SSLSocketImpl.java:983)。安全ssl。SSLSocketImpl。在sun上执行HANDSHAKE(SSLSocketImpl.java:1385)。安全ssl。SSLSocketImpl。太阳上的startHandshake(SSLSocketImpl.java:1413)。安全ssl。SSLSocketImpl。startHandshake(SSLSocketImpl.java:1397)位于org。马里亚布。jdbc。内部的mysql。MySQLProtocol。连接(MySQLProtocol.java:444)。。。还有7个

我谷歌了一下,发现这可能是因为服务器和java之间的SSL协议不同,他们说这一定是java 7或更高版本解决的。但我仍然得到错误?我错过了什么?

连接到本地主机之前的端口转发:1234:

try {
        JSch jsch = new JSch();
        jsch.addIdentity(privateKey);
        logger.info("Establishing connection to " + sshHost + " by user " + sshUser);
        session = jsch.getSession(sshUser, sshHost, 22);
        java.util.Properties config = new java.util.Properties();
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config);
        session.connect();
        int assignedPort = session.setPortForwardingL(localPort, remoteHost, remotePort);
        logger.info("assigned Port = " + assignedPort);
    } catch (JSchException e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    }
    return session;

openssl命令输出:

 $ openssl s_client -connect localhost:1234
CONNECTED(00000003)
140108247099296:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 289 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID:
    Session-ID-ctx:
    Master-Key:
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    Start Time: 1519473350
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

共有2个答案

颛孙飞鸾
2023-03-14

至少升级到JDK 8 u181。它适用于显示相同错误的ReST连接。

蓝星辰
2023-03-14

没有发布解决方案,因此对于面临此问题的任何人:

我们使用MariaDB并且一直面临这个问题,在尝试了所有事情之后,将MariaDB java客户端驱动程序版本升级到最新版本解决了这个问题。希望能有帮助。

 类似资料: