Решение отсутствует, поэтому для тех, кто сталкивается с этой проблемой:
Мы используем MariaDB и сталкиваемся с этой проблемой, пробовав все вещи, обновив версию драйвера клиента java-клиента mariaDB, чтобы решить эту проблему. Надеюсь, поможет.
Я пытаюсь подключиться к 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.net.ssl.SSLException: Неподдерживаемая версия записи Неизвестна-0.0 на sun.security.ssl.InputRecord.checkRecordVersion (InputRecord.java:552) на sun.security.ssl.InputRecord.readV3Record (InputRecord.java:565 ) на sun.security.ssl.InputRecord.read (InputRecord.java:529) на sun.security.ssl.SSLSocketImpl.readRecord (SSLSocketImpl.java:983) на sun.security.ssl.SSLSocketImpl.performInitialHandshake (SSLSocketImpl.java: 1385) на sun.security.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:1413) на sun.security.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:1397) на org.mariadb.jdbc.internal.mysql.MySQLProtocol.connect (MySQLProtocol.java:444) ... еще 7
Я задумался об этом и выяснил, что это может быть связано с различием в протоколе SSL между сервером и java, который, по их словам, должен быть разрешен java 7 или выше. Но все-таки я получаю ошибку? Что мне не хватает?
Перенаправление портов перед подключением к localhost: 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)
---
mysql,ssl,jdbc,sslhandshakeexception,