问题
在访问MySQL时出现了,如下错误:
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
The following required algorithms might be disabled: SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, include jdk.disabled.namedCurves. Edit the list of disabled algorithms to include required algorithms. You can try to enable TLSv1 or TLSv1.1 first.
JDBC driver may have disabled TLS 1.1 and its earlier versions.
从这里就可以看出MySQL和客户端连接使用的tls版本,可能是TLSv1或者是TLSv1.1,需要放开jdk对TLSv1或者是TLSv1.1黑名单的限制。随便去掉一个TLSv1或者是TLSv1.1即可重现链接。
原因
查询JDK对TLS版本的黑名单限制:vim /Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home/jre/lib/security/java.security
从这里就可以看出本地的JDK对TLSv1,TLSv1.1,有限制,具体配置如下:
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
查询MySQL5.7版本文档,可以知道,MySQL支持TLSv1, TLSv1.1, TLSv1.2 版本。
连接我的DataGrip的时候可以只使用了TLSv1, TLSv1.1,而不会使用 TLSv1.2 进行连接建立。
使用命令行登录MySQL,可以查询MySQL实例支持的TLS版本,以及当前连接使用的TLS版本。
mysql实例支持的TLS版本:
SHOW GLOBAL VARIABLES LIKE 'tls_version';
mysql当前session的使用的TLS版本:
SELECT * FROM performance_schema.session_status
WHERE VARIABLE_NAME IN ('Ssl_version','Ssl_cipher');
解决
方法1:jdk.tls.disabledAlgorithms接触限制
去掉TLSv1.1的黑名单即可,即使用如下环境变量:"-Djdk.tls.disabledAlgorithms=SSLv3, TLSv1, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, include jdk.disabled.namedCurves"
方法2:JDBC指定TLS连接版本
jdbc:mysql://:/?useSSL=true&enabledTLSProtocols=TLSv1.2文章来源:https://www.toymoban.com/news/detail-424103.html
总结
尽可能用高版本的MySQL或指定session使用的tls版本为tlsv1.2即可。文章来源地址https://www.toymoban.com/news/detail-424103.html
参考:
- Java调用ssl异常,javax.net.ssl.SSLHandshakeException: No appropriate protocol
- 6.3.2 Encrypted Connection TLS Protocols and Ciphers
- Java 1.8.0 enable TLS1.2 in JDBC connection
到了这里,关于No appropriate protocol (protocol is disabled or cipher suites are inappropriate)(Java版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!