javax. net .ssl.SSLHandshakeException: получено фатальное предупреждение: handshake_failure для google-client-api - PullRequest
2 голосов
/ 17 января 2020

Я пытаюсь получить google-calendar, используя google-client-api, но сталкиваюсь с ошибкой ниже:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308)
    at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:285)
    at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:181)
    at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164)
    at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1152)
    at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1063)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:402)
    at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567)
    at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1362)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1337)
    at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:246)
    at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:113)
    at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:84)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1012)
    at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:322)
    at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:346)
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:398)
    at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:494)
    at com.google.api.client.auth.oauth2.Credential.intercept(Credential.java:217)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:880)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:541)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:474)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:591)
    at org.springframework.batch.core.listener.CompositeJobExecutionListener.beforeJob(CompositeJobExecutionListener.java:73)
    at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:298)
    at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:134)
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
    at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:127)
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)

Ниже приведен фрагмент кода, вызывающий ошибку:

calendarList = getGoogleCalendarServiceInstance(googleCredential).calendarList().list()
                .setMaxResults(MAX_RESULTS).setPageToken(pageToken).execute();

build.gradle, как показано ниже:

#!groovy

ext {
    googleApiVersion = '1.17.0-rc'
    googleCalendarApiVersion = 'v3-rev74-1.17.0-rc'
}

dependencies {
    compile group: 'com.google.api-client', name: 'google-api-client', version: "${googleApiVersion}"
    compile group: 'com.google.http-client', name: 'google-http-client-jackson2', version: "${googleApiVersion}"
    compile group: 'com.google.apis', name: 'google-api-services-calendar', version: "${googleCalendarApiVersion}"
}

Обратите внимание, что сертификат является причиной ошибки или я пропустил некоторые зависимость? Пожалуйста, предложите.

Примечание. Мы перешли с java -8 на java -11 и в настоящее время используем пакет jre.

1 Ответ

2 голосов
/ 21 января 2020

Публикация ответа, так как это может быть полезно для других, сталкивающихся с такой же проблемой.

Проблема генерируется из-за того, что "E C наборы шифров отсутствуют". Рукопожатие не удалось сразу после ClientHello, так как сервер не поддерживал ни один из наборов шифров, отправленных клиентом.

Я нашел это решение в https://bugs.openjdk.java.net/browse/JDK-8221674

Ниже изменение исправило мою проблему:

указание провайдера в надстройках:

%JAVA_HOME%\bin\jlink.exe --module-path "mods" --add-modules=test,jdk.crypto.ec --output jre
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...