java.net.SocketException: сброс соединения - исключение при попытке использовать https restful api в java8 - PullRequest
0 голосов
/ 04 января 2019

Попытка получить доступ к службе https с помощью указанного ниже клиента, имеющего сертификаты.Это прекрасно работает с Java7, когда используется в Java8 исключение подключения сокета.Нужно ли добавлять какие-либо другие сертификаты?

protected Client getClient() {
    if (client == null) {
        try {
            TrustManager[] trustCertificates = new TrustManager[] { new X509TrustManager() {

                @Override
                public void checkClientTrusted(X509Certificate[] chain, String authType)
                        throws CertificateException {
                }
                @Override
                public void checkServerTrusted(X509Certificate[] chain, String authType)
                        throws CertificateException {
                }
                @Override
                public X509Certificate[] getAcceptedIssuers() {
                    return new X509Certificate[0];
                }

            } };
            final SSLContext sslContext = SSLContext.getInstance(SSL);
            sslContext.init(null, trustCertificates, new java.security.SecureRandom());
            final HostnameVerifier verifiedHosts = new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            };
            ClientBuilder clientBuilder = ClientBuilder.newBuilder();
            ClientConfig config = new ClientConfig();
            config.register(JacksonJsonProvider.class);
            config.register(Log4j2JerseyLoggingFilter.class);
            return clientBuilder.sslContext(sslContext).hostnameVerifier(verifiedHosts).withConfig(config).build();
        } catch (NoSuchAlgorithmException | KeyManagementException e) {
            LOG.error("Client Builder Exception " + e);
        }
    }
    return null;
}

Получение исключения подключения к сокету.

Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:189)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:593)
at sun.security.ssl.InputRecord.read(InputRecord.java:529)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:954)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1343)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1371)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1355)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1281)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1256)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250)
at org.glassfish.jersey.client.internal.HttpUrlConnector$4.getOutputStream(HttpUrlConnector.java:385)
at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.java:200)
at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.java:194)

1 Ответ

0 голосов
/ 04 января 2019

Java 7 не использует TLSv1.2 по умолчанию, но Java 8 использует .Тот факт, что он работал в Java 7, указывает на то, что сервер не поддерживает TLSv1.2.Возможно, вам нужно перейти на то, что требуется серверу, в соответствии с:

final SSLContext sslContext = SSLContext.getInstance("TLSv1");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...