背景
使用JDK8高版本做HTTPS数据推送时报错,数据无法推送,报No appropriate protocol (protocol is disabled or cipher suites are inappropriate) 此错误,使用相关的SSL协议连接也会报此错误。
分析
- 现象:JDK1.8.0_181 版本 不会报错,使用此版本以上如目前公司使用的 JDK1.8.0_291就会报错。
- 原因:高版本JDK禁用了 SSLv3, TLSv1, TLSv1.1 这三个协议,这三个协议存在不安全漏洞,所以高版本JDK直接禁用了。
解决方式
- 代码方式解决,修改httpclient参数
SSLContext sc = SSLContext.getInstance("TLSv1.2");
- 修改JDK配置文件
打开文件所在目录 C:\Program Files\Java\jdk1.8.0_291\jre\lib\security
修改文件:java.security
搜索以下内容:
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
去除SSLv3, TLSv1, TLSv1.1这三个选项,保存文件重启项目。
结语
[No appropriate protocol (protocol is disabled or cipher suites are inappropriate)] (https://stackoverflow.com/questions/60654644/no-appropriate-protocol-protocol-is-disabled-or-cipher-suites-are-inappropriate)