一次MySQL Connector升级引发连接失败的排查之路

1. 方案1:建议升级IBM jdk版本以兼容MySQL协议和加密套件,但此方案不可行。2. 方案2:依据IBM官方文档建议将系统参数com.ibm.jsse2.overrideDefaultCSName设置为true。在IBM jdk1.8.0_281+MySQL connector 8.0.20上通过脚本调用方式连接成功。需在WAS中配置过程如下:服务器-您的服务器-进程定义-...
一次MySQL Connector升级引发连接失败的排查之路
农行研发中心“数风云”团队,致力于农行大数据、数据库和云计算等领域的应用实践与技术创新。郭斌斌,作为爱可生DBA团队的一员,专注于MySQL数据库及爱可生云树DMP产品的日常运维,擅长数据库故障处理。

现象描述:在升级IBM jdk1.8.0至8.0.20版本后,使用mysql-connector-java-8.0.18进行升级,却遇到“javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)”的连接失败问题。在使用openjdk 1.8版本时,升级MySQL驱动能够正常连接。

初步分析:怀疑是IBM jdk1.8版本中支持的协议或加密套件老旧,导致SSL连接握手失败。

分析过程:

1. 官网资料分析:MySQL驱动在尝试连接MySQL 8.0时,会尝试使用TLS版本:TLSv1,TLSv1.1,TLSv1.2,TLSv1.3。驱动TLS配置文件TlsSettings.properties中Cipher suites已预先进行了限制,且MySQL支持的Cipher suites均已TLS开头。然而,8.0.18版本的驱动没有此配置文件。

2. IBM JSSE2支持的协议和套件:IBM JSSE2默认支持协议:SSL, TLS, TLSv1, TLSv1.1, TLSv1.2。部分Cipher suites在ORACLE中以“TLS”开头,而在IBM SDK中以”SSL”开头。IBM JSSE2中53个Cipher suites中49个以SSL开头,4个以TLS开头。

3. 抓包分析:通过脚本分析,发现IBM jdk1.8+mysql-connector-java-8.0.20组合下,日志显示依次尝试使用TLS13、TLS12、TLS11、TLS10协议,但没有可用的加密套件。在添加com.ibm.jsse2.overrideDefaultCSName=true参数后,成功连接MySQL。同时,添加javax.net.debug=true观察到握手阶段选择了TLSv1.2和cipher suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384。MySQL connector 8.0.18在建立TLS连接时已选择TLSv1.2和cipher suite列表,列表中大部分cipher suite以“SSL”开头。

MySQL connector 8.0.18未对cipher suite进行TLS限制,故能成功连接。驱动升级至8.0.19或8.0.20版本后,MySQL对cipher suite进行了限制,且均已TLS开头。而IBM JSSE2中的大部分套件仍保持以SSL开头的命名,导致连接握手失败。

解决方案:

1. 方案1:建议升级IBM jdk版本以兼容MySQL协议和加密套件,但此方案不可行。

2. 方案2:依据IBM官方文档建议将系统参数com.ibm.jsse2.overrideDefaultCSName设置为true。在IBM jdk1.8.0_281+MySQL connector 8.0.20上通过脚本调用方式连接成功。需在WAS中配置过程如下:服务器-您的服务器-进程定义-java虚拟机-定制属性,添加:com.ibm.jsse2.overrideDefaultCSName=true。最终需将WAS环境上的jdk升级至1.8.0_281,并使用com.ibm.jsse2.overrideDefaultCSName=true才能生效。

3. 方案3:使用jdbc连接带上参数useSSL=false和allowPublicKeyRetrieval=true,连接成功。此方案作为IBM jdk升级之前的缓释方案供项目组临时采用。配置参数AllowPublicKeyRetrieval=True,需谨慎开启,避免恶意代理通过中间人攻击获取明文密码。

4. 方案4:尝试使用JDK 1.8.0_211及额外参数,但未生效。

经过验证,最终采用方案2:升级jdk并使用com.ibm.jsse2.overrideDefaultCSName=true的组合方案。

欢迎广大技术人员投稿至:editor@dbaplus.cn2024-10-04
mengvlog 阅读 8 次 更新于 2025-07-20 22:32:14 我来答关注问题0
檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部