解决SpringBoot连接数据库的SSLHandshakeException异常

这篇具有很好参考价值的文章主要介绍了解决SpringBoot连接数据库的SSLHandshakeException异常。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题

    在改一个新项目,服务启动时报错了,堆栈信息如下:

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)
    at sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:106)
    at sun.security.ssl.TransportContext.kickstart(TransportContext.java:245)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:410)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:389)
    at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:186)
    ... 118 more

    这个错误一般是由SSL/TLS握手过程中客户端和服务器之间支持的协议或密码套件不匹配引起的。

    检查了下数据库连接串,配置了useSSL=true,表示要求使用SSL/TLS来加密与MySQL数据库之间的连接。

jdbc:mysql://******:3306/cloud?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=true

解决方案

方案一:调整SSL配置

    在连接字符串中,尝试省略 useSSL 参数或使用 useSSL=false,以便使用默认的 SSL/TLS 配置。

    如果生产场景强制要求SSL,不建议该方案。

useSSL=false

方案二:指定密码套件(建议)

    先确认mysql的ssl配置以及支持的tls版本;

mysql> show VARIABLES like '%ssl%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| have_openssl  | YES             |
| have_ssl      | YES             |
| ssl_ca        | ca.pem          |
| ssl_capath    |                 |
| ssl_cert      | server-cert.pem |
| ssl_cipher    |                 |
| ssl_crl       |                 |
| ssl_crlpath   |                 |
| ssl_key       | server-key.pem  |
+---------------+-----------------+
9 rows in set (0.09 sec)

# 确认mysql支持的tls
mysql> SHOW VARIABLES LIKE 'tls_version';
+---------------+-----------------------+
| Variable_name | Value                 |
+---------------+-----------------------+
| tls_version   | TLSv1,TLSv1.1,TLSv1.2 |
+---------------+-----------------------+
1 row in set (0.08 sec)

    在连接字符串中配置enabledTLSProtocols=TLSv1.2,指定tls协议。

jdbc:mysql://******:3306/cloud?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=true&enabledTLSProtocols=TLSv1.2

方案三:修改JDK的java.security文件

    JAVA_HOME\jre\lib\security\java.security文件中,jdk.tls.disabledAlgorithms配置,禁用特定的一些不安全的算法或协议。

    不同JDK版本,禁用的算法和协议存在差别。

    JDK8修改前

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    include jdk.disabled.namedCurves

    修改后(删除TLSv1, TLSv1.1协议)

jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    include jdk.disabled.namedCurves    

    以上方案,都可以解决最开始SSLHandshakeException的异常,具体方案请根据实际场景采纳。

    启用SSL之后,可能还会出现其它异常,需要检查是否导入证书以及其它配置,后续再列。

参考

Why can Java not connect to MySQL 5.7 after the latest JDK update and how should it be fixed? (ssl.SSLHandshakeException: No appropriate protocol) - Stack Overflow文章来源地址https://www.toymoban.com/news/detail-842779.html

到了这里,关于解决SpringBoot连接数据库的SSLHandshakeException异常的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot 配置不连接数据库启动

    启动项目的时候不需要配置连接数据库 已经连接数据库的项目临时不连接数据库启动     报如下错误:也就是说数据源的url没有配置。要么把报错数据源配上,要么排除掉数据源的加载。这里当然是后者了,把数据源加载排除。 mysql数据库驱动 druid数据库连接池 报错内容

    2024年02月11日
    浏览(52)
  • Mysql的数据库连接---SpringBoot

    1:加载驱动 2:获取连接 3:通过你的连接来获取操作数据库的statement对象 4:执行sql语句,获取结果集 1:数据库表的设计: user表:   2:在SpringBoot的测试单元经行测试 3:测试结果   以yml文件为例: 以上就是关于自己总结的连接mysql数据库的两种方法,实际的操作也不难,希望可以

    2024年02月12日
    浏览(36)
  • SpringBoot 默认数据库连接池 HikariCP

    目录  引言 1、问题描述 2、SpringBoot默认的数据库连接池 3、HikariCP是什么 4、测试依赖 5、配置文件 5.1、数据库连接参数 5.2、连接池数据基本参数 5.3、连接检查参数 5.4、事务相关参数 5.5、JMX参数 6、HikariCP源码浅析 6.1、HikariConfig--连接池配置的加载 6.2、HikariPool--连接池 1、

    2024年02月10日
    浏览(50)
  • springboot 数据库连接池配置(hikari)

    JBDC         JABC是JAVA访问关系型数据库的标注API,它为各种关系型数据的访问提供统一的接口标准,然后,各个关系型数据库厂商按照JBDC的标准,提供能使JAVA访问的驱动包。一般情况下,在JAVA中执行一条SQL语句,需要以下几个步骤: 状态JDBC驱动程序 建立数据库连接 创建

    2024年02月09日
    浏览(47)
  • Springboot整合Durid-数据库连接池

    一、Springboot使用Durid快速开始 1、 添加依赖 2、添加配置项 (1) durid连接池配置

    2024年02月11日
    浏览(51)
  • SpringBoot 是怎样连接 MySql 数据库的

    Spring Boot 是一款流行的 Java 开发框架,它可以轻松地连接各种类型的数据库,包括关系型数据库和非关系型数据库。本文将介绍 Spring Boot 是如何连接数据库的,包括其原理和代码示例。 Spring Boot 通过使用 Spring Data JPA 来连接数据库。Spring Data JPA 是 Spring Data 的一部分,是一个

    2024年02月08日
    浏览(41)
  • 以Springboot为例,如何连接多个数据库(源)

    在Spring Boot中连接多个数据库,可以通过配置多个数据源来实现。可以在配置文件中定义多个数据源的配置,每个数据源有一个唯一的名称和对应的数据源属性。然后,通过在需要访问特定数据源的地方,使用对应的数据源名称来访问该数据源。 具体步骤如下 1、在配置文件

    2024年02月16日
    浏览(26)
  • 【精·超详细】SpringBoot 配置多个数据源(连接多个数据库)

    目录 1.项目路径 2.pom.xml  引入依赖: 3.application.yml配置文件: 4.两个entity类 5.Conroller 6.两个Service以及两个ServiceImpl  7.两个Mapper及两个Mapper.xml  8.运行Application  然后在浏览器请求 9.查看两个数据库是否有新增数据           总结: 1.pom.xml 引入依赖: dynamic-datasource-spring-b

    2024年02月12日
    浏览(65)
  • 【SpringBoot教程】SpringBoot+MybatisPlus数据库连接测试 用户收货信息接口开发

    ⛪ 专栏地址 系列教程更新中 🚀 文章介绍: SpringBoot+MybatisPlus组合可以大大加快开发效率,紧接上一篇文章的内容,这篇文章进行数据库的连接与查询测试,并配置日志输出调试 🚀 源码获取 : 项目中的资料可以通过文章底部公众号戳联系我获取 maven聚合工程依赖知识 depend

    2024年02月06日
    浏览(58)
  • Springboot项目连接neo4j数据库

    首先创建一个springboot项目,这里不再介绍。 连接 neo4j 数据库的依赖包 spring-boot-starter-data-neo4j依赖包 mybatis-plus依赖包

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包