Завершение запроса к https прекращает работу, но запрос клиента Java завершается неудачно с ошибкой «javax.net.ssl.SSLHandshakeException» - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь подключиться к конечной точке https, сделав запрос GET с помощью клиента Java.конечная точка выглядит так: 'https://domain/path/{token}',but каждый раз, когда я делаю запрос, я получаю ' javax.net.ssl.SSLHandshakeException: получено фатальное предупреждение: handshake_failure ' Исключение, я просматривал много сайтов, нонеудачно.Интересно, что когда я делаю один и тот же запрос через POSTMAN с другого хоста (windows), он работает, также я копировал команду curl, сгенерированную из POSTMAN и запускающуюся на хосте, где работает мой клиент, он тоже там работает нормально.только код Java не может подключиться к конечной точке.Теперь мои вопросы:
---> это проблема с сертификатом.
---> если да, то как работает curl без сертификата.

Спасибо.

ПРИМЕЧАНИЕ. Следующее уже испробовано:
-> установить тот же набор HEADERS, который присутствует с командой curl для соединения с клиентом java.
-> также использовал альтернативные клиенты отдыха (okhttp3) и библиотеки HttpClient, но получил то же исключение.

Ниже приведена рабочая команда curl:

curl -X GET \
  https://domain/x/y/XUwDummyTokenRKZ80EnxDCJlM \
  -H 'Accept: */*' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Host:hostname' \
  -H 'accept-encoding: gzip, deflate' \
  -H 'cache-control: no-cache

и код клиента java, используемый для подключениядо конечной точки https:

 public void printGetResult( String destUrlStr ) {
        try {
           URL url = new URL(destUrlStr);
           HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
           conn.setRequestMethod( "GET" );

           InputStream is = conn.getInputStream();
           InputStreamReader isr = new InputStreamReader(is);
           BufferedReader br = new BufferedReader(isr);

           String inputLine;

           while ((inputLine = br.readLine()) != null) {
               System.out.println(inputLine);
           }

           br.close();


     }catch(Exception e) {
        System.out.println("exception is"+e); 
     }

    }

Ожидаемый результат: json
(я знаю, что в моем запросе curl я установил accept как *, но он работает)
Фактический результат:

javax.net.ssl.SSLHandshakeException: получено фатальное предупреждение: handshake_failure

1 Ответ

0 голосов
/ 20 мая 2019

Вы должны добавить сертификат удаленного сервера в хранилище java .Есть несколько способов сделать это. Здесь является одним примером.

...