我试图连接到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)
---
至少升级到JDK 8 u181。它适用于显示相同错误的ReST连接。
没有发布解决方案,因此对于面临此问题的任何人:
我们使用MariaDB并且一直面临这个问题,在尝试了所有事情之后,将MariaDB java客户端驱动程序版本升级到最新版本解决了这个问题。希望能有帮助。
我发布了这个问题,我可以通过删除WebLogic startups参数来解决这个问题: 有人能解释一下吗?
下面的代码有时失败,有时工作。我使用的是Java8。是服务器端的问题吗? 线程“main”javax.net.ssl.sslException中的异常:不支持的记录版本未知-0.0。
在尝试访问AWS服务时,我收到以下证书错误。我在Jetty服务器上运行这个。 我用同样的设置创建了另一个hello world项目,它似乎工作正常? 为什么我突然得到了javax。网ssl。SSLexException:不支持的记录版本未知-0.0例外?
问题内容: 我试图拨打https并收到以下错误:记录版本不受支持SSLv2Hello 谁能告诉我我在做什么错?谢谢你的帮助。 这是StackTrace: 这是工作示例: 问题答案: 弄清楚了。我在鞋带上绊倒的两个地方是: 需要在PoolingHttpClientConnectionManager中注册https 将TLSv1设置为SSLConnectionSocketFactory中唯一受支持的协