zoukankan      html  css  js  c++  java
  • TSL协议升级导致的问题:caught when processing request: Received fatal alert: protocol_version

    近日,公司升级TSL协议,禁用TSL1.0,导致原本好好的https接口,报以下错误:

    2019-03-05 15:43:29 [org.apache.commons.httpclient.HttpMethodDirector]-[INFO] - I/O exception (javax.net.ssl.SSLException) caught when processing request: Received fatal alert: protocol_version

     

    解决方案:

    把原来TSLv1.0协议升级成1.1  or1.2即可。

            SSLContext sslContext = SSLContexts.custom().useTLS().build();
            SSLConnectionSocketFactory f = new SSLConnectionSocketFactory(sslContext, new String[] { "TLSv1.2" }, null,
                    null);
            CloseableHttpClient client = HttpClients.custom().setSSLSocketFactory(f).build();

    直接贴修改前后的代码:

    原始使用的HttpClient版本叫老,默认1.0,且没有重新设置TSL协议版本的地方;为了升级,使用CloseableHttpClient ,且引入SSLContext 。

    修改前:

    public static String postJosnOld(String url,String jsonString) throws Exception{    
            HttpClient client = new HttpClient();    
            PostMethod myPost = new PostMethod(url);    
            //设置请求超时时间 15秒
            client.getHttpConnectionManager().getParams().setConnectionTimeout(15000);
            String responseString = null;   
            //设置请求头部类型   
            myPost.setRequestHeader("Content-Type","application/json;charset=utf-8");  
            myPost.setRequestHeader("charset","utf-8");  
            myPost.setRequestEntity(new StringRequestEntity(jsonString,"text/json","utf-8"));     
            int statusCode = client.executeMethod(myPost);
            if(statusCode == HttpStatus.SC_OK){    
                BufferedInputStream bis = new BufferedInputStream(myPost.getResponseBodyAsStream());    
                byte[] bytes = new byte[1024];    
                ByteArrayOutputStream bos = new ByteArrayOutputStream();    
                int count = 0;    
                while((count = bis.read(bytes))!= -1){    
                    bos.write(bytes, 0, count);    
                }    
                byte[] strByte = bos.toByteArray();    
                responseString = new String(strByte,0,strByte.length,"utf-8");    
                bos.close();    
                bis.close();    
            }    
            myPost.releaseConnection();    
            return responseString;   
        }

    修改后:

        public static String postJosn(String url, String jsonString) throws Exception {
    
            SSLContext sslContext = SSLContexts.custom().useTLS().build();
            SSLConnectionSocketFactory f = new SSLConnectionSocketFactory(sslContext, new String[] { "TLSv1.2" }, null,
                    null);
            CloseableHttpClient client = HttpClients.custom().setSSLSocketFactory(f).build();
            HttpPost myPost = new HttpPost(url);
            myPost.setHeader(HTTP.CONTENT_TYPE, "application/json;charset=utf-8");
            myPost.setHeader("charset", "utf-8");
    
            StringEntity s = new StringEntity(jsonString, "utf-8");
            s.setContentEncoding("UTF-8");
            s.setContentType("application/json;charset=utf-8");
            myPost.addHeader("Content-Type", "application/json;charset=utf-8");
            myPost.setEntity(s);
            HttpResponse res = client.execute(myPost);
            HttpEntity entity = res.getEntity();
            myPost.releaseConnection();
            return EntityUtils.toString(entity, "utf-8");
        }

     

  • 相关阅读:
    ZOJ 3705 Applications
    UVA 220 Othello
    HDU 2084 数塔
    第五章:变量
    第四章:注释
    第三章:程序结构
    第二章:项目的创建和环境熟悉
    第一章:c#开发环境安装
    处理字段串
    查询表的列信息
  • 原文地址:https://www.cnblogs.com/cocoxu1992/p/10481259.html
Copyright © 2011-2022 走看看