1.问题来源
最近升级了本地的jdk,发现之前使用MySql的项目都启动不起来了,查看控制台,发现了以下日志信息:
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
at sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:171) ~[na:1.8.0_381]
at sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:106) ~[na:1.8.0_381]
at sun.security.ssl.TransportContext.kickstart(TransportContext.java:245) ~[na:1.8.0_381]
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:410) ~[na:1.8.0_381]
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:389) ~[na:1.8.0_381]
at com.mysql.cj.protocol.ExportControlled.performTlsHandshake(ExportControlled.java:316) ~[mysql-connector-java-8.0.18.jar:8.0.18]
at com.mysql.cj.protocol.StandardSocketFactory.performTlsHandshake(StandardSocketFactory.java:188) ~[mysql-connector-java-8.0.18.jar:8.0.18]
at com.mysql.cj.protocol.a.NativeSocketConnection.performTlsHandshake(NativeSocketConnection.java:99) ~[mysql-connector-java-8.0.18.jar:8.0.18]
at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:329) ~[mysql-connector-java-8.0.18.jar:8.0.18]
... 96 common frames omitted
2.问题解决
经过查找资料,发现是ssl安全连接的问题,以前的jdk版本默认是不使用SSL连接MySql的,不知道从jdk1.8的哪个版本开始默认使用SSL连接MySql了。解决方案也找了两种:
2.1 方式一
找到jre的安装目录,如我的是“
E:\Program Files\Java\jre-1.8\lib\security
”,编辑”java.security
“,搜索“SSLv3
”,找到后将"SSLv3, TLSv1, TLSv1.1,
"全部删除即可。
2.2 修改连接信息(推荐)
在Mysql连接字符串的后面加上:
&useSSL=false
,完整字符串如下:
jdbc:mysql://192.168.1.100:3306/123456?serverTimeznotallow=GMT%2B8&useUnicode=true&characterEncoding=utf8&useSSL=false
这样就可以启动了,此方式简单有效。