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

javax.net.ssl.SSLHandshakeException异常解决方案_mysql

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, "全部删除即可。

javax.net.ssl.SSLHandshakeException异常解决方案_mysql_02

2.2 修改连接信息(推荐)

在Mysql连接字符串的后面加上:&useSSL=false,完整字符串如下:

jdbc:mysql://192.168.1.100:3306/123456?serverTimeznotallow=GMT%2B8&useUnicode=true&characterEncoding=utf8&useSSL=false

这样就可以启动了,此方式简单有效。