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.