У меня есть следующий простой код для установки соединения SSL.
public static void main(String[] args) throws IOException {
System.setProperty("javax.net.debug", "ALL");
System.setProperty("java.net.useSystemProxies", "true");
URL url = new URL("https://google.com");
URLConnection con = url.openConnection();
try (BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()))) {
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
Если я запускаю этот код в Java 8, он не работает.Он останавливается при запуске SSL Handshake с java.net.SocketException: Connection reset
.
main, WRITE: TLSv1.2 Handshake, длина = 214 main, ожидание close_notify или alert: состояние 1 Исключение в потоке "main"java.net.SocketException: сброс соединения в java.net.SocketInputStream.read (SocketInputStream.java:209) в java.net.SocketInputStream.read (SocketInputStream.java:141) в sun.security.ssl.InputRecord.readFully (InputRecord.java: 465) в sun.security.ssl.InputRecord.read (InputRecord.java:503) в sun.security.ssl.SSLSocketImpl.readRecord (SSLSocketImpl.java:973) в sun.security.ssl.SSLSocketImpl.waitForClose (SSLSocketImpl.java:1769) в sun.security.ssl.HandshakeOutStream.flush (HandshakeOutStream.java:124) в sun.security.ssl.Handshaker.kickstart (Handshaker.java:1020) в sun.security.ssl.SSSShakeImplHl(SSLSocketImpl.java:1487) в sun.security.ssl.SSLSocketImpl.performInitialHandshake (SSLSocketImpl.java:1351) в sun.security.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:1)t sun.security.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:1387) на sun.net.www.protocol.https.HttpsClient.afterConnect (HttpsClient.java:563) на sun.net.www.protocol.https.onteHur.connect (AbstractDelegateHttpsURLConnection.java:185) в sun.net.www.protocol.http.HttpURLConnection.getInputStream0 (HttpURLConnection.java:1512) в sun.net.www.protocol.http.HttpURLConnection.tt40Jon.jpg) на sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream (HttpsURLConnectionImpl.java:254) на com.hlcl.exp.Main.main (Main.java:18) main, исключение при ожидании закрытия java.net.SocketException: основной сброс подключения, обработка исключения: java.net.SocketException: основной сброс подключения, SEND TLSv1.2 ALERT: фатальный, description = непредвиденное_основание main, WRITE: TLSv1.2 Alert, длина = 2 основной, предупреждение об отправке исключения: java.net.SocketException: сброс соединения по одноранговому узлу: ошибка записи сокета main, называется closeSocket ()
ЕслиЯ выполняю тот же код в среде Java 10. Он работает.
Я проверил прокси, который обнаружен Java.В Java 8 обнаружено прямое (без прокси) соединение.В Java 10 обнаружены следующие настройки прокси.
тип прокси: HTTP
имя хоста прокси: ipv4.178.3.225.226.webdefence.global.blackspider.com
порт прокси: 8081
Если я удаляю System.setProperty("java.net.useSystemProxies", "true");
или задаю значение false, это также не работает с Java 10. Но настройка параметров прокси через системные свойства не работает.