【Kettle7.0链接本地MySQL数据库报错】
1. 问题描述
报错问题:kettle7.0报错,提示No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
错误原因:
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:101)
at sun.security.ssl.TransportContext.kickstart(TransportContext.java:238)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:394)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:373)
at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:149)
... 66 more
主机名 : 127.0.0.1
端口 : 3306
数据库名 : test
2. 情况描述
情况描述:本地链接数据库,链接报错,排查数据库grant授权,navicat链接了数据库账号密码均可以,其他电脑都可以,就是本地电脑链接不上,链接报错。经过排查最后确定是java版本为1.8.0_301,对应的301链接MySQL数据库协议不对
1)MySQL和客户端连接使用的tls版本,可能是TLSv1或者是TLSv1.1,需要放开jdk对TLSv1或者是TLSv1.1黑名单的限制。随便去掉一个TLSv1或者是TLSv1.1即可重现链接。
2)查询MySQL5.7版本文档,可以知道,MySQL支持TLSv1, TLSv1.1, TLSv1.2 版本。
![在这里插入图片描述](https://img-blog.csdnimg.cn/41b508e9a691478
3)连接我的DataGrip的时候可以只使用了TLSv1, TLSv1.1,而不会使用 TLSv1.2 进行连接建立。使用命令行登录MySQL,可以查询MySQL实例支持的TLS版本,以及当前连接使用的TLS版本。mysqlcli连接
SHOW VARIABLES LIKE 'tls_version';
SELECT * FROM performance_schema.session_status WHERE VARIABLE_NAME IN ('Ssl_version','Ssl_cipher');
3. 解决办法
- 【降低JDK版本】将本地JDK版本由1.8.0_301降低到1.8.0_201,在Kettle7.0本地链接测试,可以链接数据库。
- 【修改JDK文件】没尝试怕JDK修改后不好用
4. 参考文献
- No appropriate protocol (protocol is disabled or cipher suites are inappropriate)(Java版)
- 记一次No appropriate protocol (protocol is disabled or cipher suites are inappropriate)调用异常及解决办法