You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure更新JRE后Java函数连接MySQL报SSLHandshakeException如何解决

问题根因

zulu8.54.0.21对应的JRE 8u292版本默认在java.security配置中禁用了TLS 1.0、TLS 1.1协议,而你的Azure MySQL 5.7最低TLS版本设置为1.0,开启强制SSL后,客户端与服务端无法协商出共同支持的TLS协议,就会抛出SSLHandshakeException异常。

解决方案(按推荐优先级排序)

方案1:升级Azure MySQL的最低TLS版本(最安全,优先选择)

  • 登录Azure门户,进入你的MySQL Server实例配置页
  • 找到TLS设置选项,将最低TLS版本从TLS 1.0修改为TLS 1.2
  • 重启MySQL实例生效,不需要修改Java端任何配置即可恢复连接

注意:Azure MySQL 5.7原生支持TLS 1.2,该修改不会影响其他正常使用TLS 1.2及以上版本的客户端连接,同时可以规避低版本TLS的安全漏洞。

方案2:在JPA连接配置中显式指定TLS协议(应用级修改,无环境依赖)

如果暂时无法升级MySQL的TLS版本,可直接修改JPA连接参数实现兼容,不需要调整运行环境配置:

  • 在你的persistence.xml或者创建EntityManagerFactory的属性配置中,给JDBC连接URL添加参数enabledTLSProtocols=TLSv1,TLSv1.1,TLSv1.2,示例配置如下:
Map<String, String> properties = new HashMap<>();
properties.put("javax.persistence.jdbc.url", "jdbc:mysql://<你的MySQL实例地址>:3306/<数据库名>?useSSL=true&requireSSL=true&enabledTLSProtocols=TLSv1,TLSv1.1,TLSv1.2");
// 用户名、密码、驱动类、JPA厂商等其余配置保持不变
EntityManagerFactory emf = Persistence.createEntityManagerFactory("你的持久化单元名称", properties);

注意:如果你使用的MySQL JDBC驱动版本低于5.1.38,需要先升级驱动到5.1.38及以上版本才支持enabledTLSProtocols参数。

方案3:修改JRE的安全配置,解禁TLS 1.0/1.1(全局临时兼容方案)

如果无法修改应用代码,可通过调整JRE全局安全规则实现兼容:

  • 找到Azure Function运行环境的java.security配置文件,默认路径为$JAVA_HOME/jre/lib/security/java.security
  • 找到jdk.tls.disabledAlgorithms配置项,删除其中的TLSv1、TLSv1.1条目,修改前后示例如下:
# 修改前配置
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, ...
# 修改后配置
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, ...
  • 重启Azure Function实例生效。

内容的提问来源于stack exchange,提问作者Amit Rathod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:24:03