SSL соединение Handshake Java 8 не работает - PullRequest
0 голосов
/ 10 октября 2018

У меня есть следующий простой код для установки соединения 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. Но настройка параметров прокси через системные свойства не работает.

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Я думаю, что обнаружение прокси в Java 8, кажется, не работает для вас.Предполагая, что обнаружение Java 10 правильное, попытайтесь настроить прокси-сервер через системные свойства (для соединений HTTPS).

System.setProperty(“https.proxyHost“, “<proxy host>”);
System.setProperty(“https.proxyPort“, “<proxy port>”);
0 голосов
/ 10 октября 2018

Я не эксперт по Java.Но для меня ваш вопрос сводится к следующему:

  • он не работает, если не используется прокси (возможно, из-за какого-то брандмауэра)
  • работает (по крайней мере, с Java 10)если используется прокси
  • , но вы не можете заставить его использовать прокси с Java 8 - по крайней мере, не так, как с Java 10

Как установить прокси в Java8 задокументировано в Java Networking and Proxies .java.net.useSystemProxies также поддерживается Java 8 в соответствии с документацией.Поэтому может случиться так, что вы выполняете свою программу в разных системах (следовательно, в разных версиях Java), и у одной из них установлен правильный системный прокси, а у другой - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...