Сбой при рукопожатии при вызове https - PullRequest
0 голосов
/ 11 ноября 2019

Мне нужна ваша помощь здесь при вызове службы отдыха HTTPS.

Некоторые сведения, мне нужно вызвать службу отдыха, размещенную как HTTPS.

Я получил сертификат, и мне удалось получитьответ от почтальона. Очень важно, я мог подключиться только тогда, когда объявил в Postman сертификат как « ca сертификат », если я объявил его как « сертификат клиента ». Я не смог подключиться.

Теперь я хотел вызвать службу через Java, поэтому я генерирую JKS с помощью keytool:

C: \ WINDOWS \ system32> keytool -import -trustcacerts -alias PublicKeyFromCEF -file service.cer -keystore ABCD.jks

Я построил клиент

System.setProperty("javax.net.ssl.trustStore", "c:/ABCD.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "123456");
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

char[] passphrase = "123456".toCharArray(); //password
KeyStore keystore = KeyStore.getInstance("JKS");
//KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(new FileInputStream("c:/ABCD.jks"), passphrase); //path

TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keystore);

SSLContext context = SSLContext.getInstance("TLS");
TrustManager[] trustManagers = tmf.getTrustManagers();
context.init(null, trustManagers, null);
SSLSocketFactory sf = context.getSocketFactory();
URL url = new URL("https://services/api/v1/doctors?docId=5555");

HttpsURLConnection httpsCon = (HttpsURLConnection) url.openConnection();
httpsCon.setSSLSocketFactory(sf);
httpsCon.setRequestMethod("GET");

System.out.println("Response Message is " + httpsCon.getResponseMessage());

Когда я вызываю службу, я получаю сообщение об ошибке: java.net.SocketException: сброс соединения в методе java.net.SocketInputStream#socketRead

Я подозреваю, что я не сгенерировал JKS правильно

Вот состояние объектов при отладке, надеюсь, оно пролило свет:

в методе sun.security.ssl.SSLSocketImpl#performInitialHandshake:

this.input.r.helloVersion = LTSv1

this.input.r.getHandshakeHash() : mds,sha are null, data is populated.

в методе: sun.security.ssl.InputRecord#read

this.exlen =0

тогда я получаю исключение на java.net.SocketInputStream#tRead при вызове n = socketRead(fd, b, off, length, timeout);

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