您的位置:首页 > 理论基础 > 计算机网络

jdk版本导致的调用https的SSLV3协议错误

2016-08-20 00:00 274 查看
在调试接口过程中,发现本地调试一直正常,但服务器一直报
“Server chose SSLv3, but that protocol version is not enabled or not supported by the client.”
去网上查了下,说linux要开启SSL v3。咨询了下运维,给我的答复是,https的URL可以在服务器上访问。
在这个过程中我看了下服务器的jdk版本和我本地运行的jdk版本不一致,网上看了下这两个版本的区别,发现本地的jdk默认开启了SSLV3,而服务器上jdk版本是关闭的。
然后去问了客户给的https支持的协议,说是支持SSLV3,不支持SSLV2及其他。
因为所有客户都是http协议访问,所以让客户把https协议改成了http协议。就没再开启服务器jdk sslv3
下面给出代码实现

public static String httpPost(String url, String json,Map<String,String> headerMap)
throws Exception {
String res = null;
// 将JSON进行UTF-8编码,以便传输中文
//String encoderJson = URLEncoder.encode(json,"UTF-8");
final CloseableHttpClient httpClient = HttpClients.createDefault();

HttpPost httpPost = new HttpPost(url);
httpPost.addHeader(HTTP.CONTENT_TYPE, HttpUtils.APPLICATION_JSON);
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(3000).setConnectTimeout(3000).build();//设置请求和传输超时时间
httpPost.setConfig(requestConfig);

if(headerMap!=null){
for(String key:headerMap.keySet()){
httpPost.addHeader(key, headerMap.get(key));
}
}

StringEntity entity = new StringEntity(json,"UTF-8");
entity.setContentType(CONTENT_TYPE_TEXT_JSON);
entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
APPLICATION_JSON));
httpPost.setEntity(entity);
logger.info("发送的报文:"+json);

HttpResponse response = httpClient.execute(httpPost);
int statusCode = response.getStatusLine().getStatusCode();
logger.info(statusCode);
if (HttpStatus.SC_OK == statusCode) {
HttpEntity httpEntity = response.getEntity();
res = EntityUtils.toString(httpEntity, "UTF-8");
logger.info("接收的报文:"+res);
}
httpClient.close();
return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java ssl v3
相关文章推荐