在使用HttpUtil类时,针对某一个接口报错出现异常
HttpGetInfo result = HttpUtil.getInfo(token, Url);
但是这个getInfoUrl在postman上调用是成功的
后来查找后发现问题是:
在Java8及高版本以上的版本在调用ssl时会出现javax.net.ssl.SSLHandshakeException: No appropriate protocol
的异常
(博客地址:https://blog.csdn.net/wuyu7448/article/details/121131352)
修改jre/lib/security/java.security
中的disabledAlgorithms
查看disabledAlgorithms(禁用算法)发现:
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
,然后重启应用即可
问AI发现:
所以是不是可以理解成,jdk1.8禁用了这些版本协议,但是HttpUtils又要用到,所以冲突了?
对应该是这样的,再看看源码
HttpUtil.getInf ----> httpGetByType
在httpGetByType类中有一个实例 sslcontext
SSLContext sslcontext = createIgnoreVerifySSL();
进入,发现主要创建了跳过的解密算法
SSLContext sc = SSLContext.getInstance("SSLv3");
所以,结论应该是HttpUtil使用时会用到TLS算法(TLSv1,TLSv1.1),但是jdk8里面禁用了,而用postman调试时,我点了跳过SSL认证从而没有出现此问题。
标签:protocol,No,TLSv1.1,ssl,disabledAlgorithms,net,HttpUtil From: https://www.cnblogs.com/southmelon/p/17552902.html