「问题记录」docker容器运行服务时jdk的tls导致mysql连接不上的问题解决
介绍语
本号主要是Java常用关键技术点,通用工具类的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+docker等集成框架的技术分享;datax、kafka、flink等大数据处理框架的技术分享。文章会不断更新,欢迎码友关注点赞收藏转发!
望各位码友点击关注,冲1000粉。后面会录制一些视频教程,图文和视频结合,比如:图书介绍网站系统、抢购系统、大数据中台系统等。技术才是程序猿的最爱,码友们冲啊
如果码友觉得代码太长,可以从头到尾快速扫射一遍,了解大概即可。觉得有用后再转发收藏,以备不时之需。
问题描述#
JDK1.8默认禁用了SSLv3,TLSv1, TLSv1.1协议,使用的是TLS1.2协议,而数据库使用的是TLS1.0协议,因此需要修改JDK的协议,使其打开TLS1.0协议。
异常信息1#
具体异常信息如下:
Caused by: javax.net.ssl.SSLHandshakeException: The server selected protocol version TLS10 is not accepted by client preferences [TLS12]
或者
异常信息2#
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
解决方法#
查找java.security文件#
找到java的java.security文件,因为我的是docker镜像,所以需要到容器中查找jdk的路径
[root@localhost ~]# docker exec -it bigdata-executor-a /bin/sh
sh-4.2# whereis java
java: /usr/bin/java /usr/lib/java /etc/java /usr/share/java /usr/share/man/man1/java.1.gz
sh-4.2# ls -lrt /usr/bin/java
lrwxrwxrwx 1 root root 22 Dec 27 16:12 /usr/bin/java -> /etc/alternatives/java
sh-4.2# ls -lrt /etc/alternatives/java
lrwxrwxrwx 1 root root 73 Dec 27 16:12 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64/jre/bin/java
sh-4.2#
通过上面命令查到容器中的jdk目录为/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64/jre/bin/java
拷贝/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64/jre/lib/security/java.security文件到宿主机
docker cp bigdata-executor-a:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64/jre/lib/security/java.security /data/java/jre/lib/security/
修改java.security文件#
编辑宿主机/data/java/jre/lib/security/java.security文件
找到如下地方:
jdk.tls.disabledAlgorithms=SSLv3,TLSv1, TLSv1.1, RC4, DES, MD5withRSA,
DH keySize < 1024, EC keySize < 224, anon, NULL,
include jdk.disabled.namedCurves
修改为:
jdk.tls.disabledAlgorithms=RC4, DES, MD5withRSA,
DH keySize < 1024, EC keySize < 224, anon, NULL,
include jdk.disabled.namedCurves
重新运行服务#
在运行命令中加入java.security文件映射,覆盖容器中的文件,重新运行即可解决问题
docker run -d -p 8017:8017 \
--name bigdata-executor-a \
-v /data/java/jre/lib/security/java.security:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64/jre/lib/security/java.security \
-e "JAVA_OPTIONS=-Xmx1000M -Xms500M -Xmn200M -XX:MaxMetaspaceSize=300M -XX:MetaspaceSize=200M -XX:HeapDumpPath=/tmp/document_server.dump" \
--net dadi-bridge \
--restart=always \
harbor.hy-zw.com/default/dispatch-center-executor:v3
鄙人编码十年多,在项目中也积累了一些工具类,很多工具类在每个项目都有在用,很实用。大部分是鄙人封装的,有些工具类是同事封装的,有些工具类已经不记得是ctrl+c的还是自己封装的了,现在有空就会总结项目中大部分的工具类,分享给各位码友。如果文章中涉及的代码有侵权行为请通知鄙人处理。
计划是先把工具类整理出来,正所谓工欲善其事,必先利其器。项目中不管是普通单体项目还是多模块maven项目或是分布式微服务,一部分功能模块都是可以重用的,工具类模块就是其中之一。
作者:Java夜未眠
出处:https://www.cnblogs.com/liangxianning/p/17058211.html
版权声明:本博客所有文章除特别声明外,均采用「 MIT 许可协议。」许可协议进行许可
关于博主: 评论和私信会可能回复较慢,点击上面加人图标加我为好友吧
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)