Rubin's Blog

  • 首页
  • 关于作者
  • 隐私政策
享受恬静与美好~~~
分享生活的点点滴滴~~~
  1. 首页
  2. 问题记录
  3. 正文

问题记录之JDK8连接MySQL数据库失败

2022年 4月 11日 912点热度 0人点赞 0条评论

由于数据库使用的是MySQL5.7的版本,我的新机器装的JDK8,跑项目的时候启动失败并发生了javax.net.ssl.SSLHandshakeException,一下子给我弄蒙了。经过一系列的排查(排查网络问题、环境问题、数据库问题等等,其实就是走了很多弯路,这就体现了好好看日志的重要性),定位到是SSL协议的问题。

发生该问题的原因是因为协议没对上,其实就是日志里面说的SSL握手失败,所以导致程序和数据库的连接失败,导致数据源初始化失败等一系列问题。。。

那知道了问题的原因,是什么导致了该问题的产生呢?为啥我原来的版本没有遇到过这个问题呢?经过笔者调研:jdk8从小版本JDK8u261开始支持TLS1.3,默认TLS1.2之前的协议在security里面是禁用的,所以从JDK8u261开始只有TLS1.2和1.3是默认启用的;MySQL在8.0.26以及之后的版本,TLS1.0和TLS1.1已经被废弃,但是可以作为握手的协议,会在MySQL的日志记录器中提示这些协议会在未来被删除,对于8.0.18以及之前的版本,包括5.6,5.7来说,为了兼容性的原因,不会启用1.2以及更高版本的TLS协议,所以MySQL 5.7这里默认是TLS1.0,TLS1.1被使用。所以,JDK8支持TLS1.2和1.3,MySQL支持TLS1.0和1.1,协议完全对不上,所以导致了上述的握手失败的问题。

既然我们剖析完了问题以及产生原因,我们怎样解决该问题呢?有三种解决方案:

方案一:

在项目的MySQL连接配置的地方加上useSSL=false的参数。

方案二:

把本地的JDK的协议栈全部打开。打开的方法为编辑$JAVA_HOME/jre/lib/security/java.security文件,找到jdk.tls.disabledAlgorithms的配置项,将其全部注释掉。

方案三:

在项目的MySQL连接配置上加上enabledTLSProtocols=TLSv1.2的参数来指定连接的协议栈。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 问题记录
最后更新:2022年 6月 9日

RubinChu

一个快乐的小逗比~~~

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
最新 热点 随机
最新 热点 随机
问题记录之Chrome设置屏蔽Https禁止调用Http行为 问题记录之Mac设置软链接 问题记录之JDK8连接MySQL数据库失败 面试系列之自我介绍 面试总结 算法思维
MySQL学习之整型 MySQL之Sharding-JDBC数据分片 SpringCloud Netflix之Feign远程调用组件 SpringCloud Alibaba之微服务开发 JVM简介 MongoDB之命令解析

COPYRIGHT © 2021 rubinchu.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

京ICP备19039146号-1