Java 1.6 HttpsURLConnection:java.net.SocketException:连接重置

时间:2015-09-01 07:47:38

标签: java httpsurlconnection jdk6



我有一个问题在这里,我有一些在1.7及以上版本中完美的代码但是一旦我切换到1.6,我总是得到错误

java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)

我认为问题在于HttpsURLConnection,但我无法弄清楚是什么。以下是我初始化HttpsURLConnection 的方法:

 // create URL Object from String
 URL url = new URL(https_url);
 // set IP Adress for X509TrustManager
 caTrustManager.setHostIP(url.getHost());     
 TrustManager[] trustCerts = new TrustManager[]{
     caTrustManager
 };
 SSLContext sc = SSLContext.getInstance("SSL");
 sc.init(null, trustCerts, new java.security.SecureRandom());
 //'ArrayList' where the data is saved from the URL
 ArrayList data = null;
 // open URL
 HttpsURLConnection httpsVerbindung = (HttpsURLConnection) url.openConnection();           
 httpsVerbindung.setSSLSocketFactory(sc.getSocketFactory());
 // Read the data from the URL
 data = PerformAction.getContent(httpsVerbindung);

以下是出现错误的Methode: Class = PerformAction
Methode = getContent(HttpsURLConnection con)

public static ArrayList getContent(HttpsURLConnection con) {

    // The ArrayList where the information is saved
    ArrayList infoFromTheSite = new ArrayList();
    // check if connection not null
    if (con != null) {

        BufferedReader br = null;
        try {
            // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            // !!!! **Error happens Here** !!!!
            // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            br = new BufferedReader(new InputStreamReader(con.getInputStream()));

            String input;
            // go through all the Data
            while ((input = br.readLine()) != null) {
                // save to ArrayList
                infoFromTheSite.add(input);
            }

        } catch (IOException ex) {
            Logging.StringTimeFail("Fehler mit dem BufferedReaders");
            ex.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException ex) {
                    Logger.getLogger(PerformAction.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

    }

}


我希望我的问题有点清楚,有人理解我:P
感谢您抽出宝贵时间来解决我的问题!

修改

所以我发现Wireshark发现失败的数据包比那些成功的数据包更小(157字节=失败; 208字节=真)

我想也许他不是在加密IP包中的数据而不是发送证书。

我还注意到SSL握手是成功的,但是一旦客户端请求数据它失败并且服务器anwsers用:

Connection Reset

(是服务器呼叫"连接重置")
我真的迷失在这里:D

1 个答案:

答案 0 :(得分:3)

正如@Robert在评论中提到的那样:

  

如果您正在与之通信的服务器是安全维护的   Java 1.6会遇到问题,因为它只支持Java 1.6   不安全的SSL / TLS版本(没有TLS 1.1和1.2支持且仅限   过时的密码。)

     

修复:升级您的Java版本。

如果您无法升级Java版本,可以使用 Apache HTTPClient