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

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:56   2088   0

在调试接口过程中,发现本地调试一直正常,但服务器一直报 “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;
 }

转载于:https://my.oschina.net/okqq/blog/735396

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP