Java 1.6 HttpsURLConnection: java.net.SocketException: сброс подключения



У меня есть проблема здесь, у меня есть некоторый код, который прекрасно работает в 1.7 и выше, но как только я переключаюсь на 1.6, я всегда получаю эту ошибку:

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

Я думаю, что проблема с HttpsURLConnection, но я не могу понять, что. Вот как я инициализирую соединение HttpsURLC:

 // 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);

А вот метод, где происходит ошибка:
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 Handshake успешен, но как только Клиент запрашивает данные, он терпит неудачу, и Сервер отвечает:

Connection Reset

(Да, Сервер вызывает "Сброс соединения")
Я действительно потерян здесь:D

1 ответ

Решение

Как @Robert упомянул в комментарии:

Если сервер, с которым вы общаетесь, поддерживается в безопасном режиме, у вас будут проблемы с Java 1.6, поскольку он поддерживает только небезопасные версии SSL/TLS (без поддержки TLS 1.1 и 1.2 и только устаревшие шифры).

Исправлено: обновить версию Java.

Если вы не можете обновить версию Java, вы можете использовать Apache HTTPClient.

Другие вопросы по тегам