1. 问题描述
在本地调用微信退款正常,放到线上就错误。
No appropriate protocol (protocol is disabled or cipher suites are inappropr)
2.解决方案一
在自己的Java请求代码里面修改如下:
将SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" }, null, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
替换成如下代码。就是去掉了**String[] { “TLSv1” }**这个协议。
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
3.解决方案二
更换JDK1.8版本。
首先查看这个文件:java.security
在/usr/java/jdk1.8.0_202/jre/lib/security
下面
找到这个:jdk.tls.disabledAlgorithms
,出现如下内容说明正常:
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, \
EC keySize < 224, 3DES_EDE_CBC, anon, NULL
出现下面的说明版本很新,会报错。
好像从jdk1.8.0_291及以上都是下面的配置。
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