Я пытаюсь подключиться к своей базе данных Cloudant из Java, используя TLSv1.2 с сервера Liberty, на котором работает IBM JRE.
Поддержка подключения ниже TLSv1.2 заканчивается, и мне нужно, чтобы это работало.
Я добавил customSSLSocketFactory
в компоновщик, сконфигурированный для связи TLSv1.2, когда я запускаю его в своей локальной среде, которая работает на Oracle JRE, ошибки нет, но когда я запускаю его в более новой среде, котораязапускает сервер Liberty с IBM JRE (последние версии Java 8) Я получаю сообщение об ошибке.
SSLSocketFactory sslSocketFactory;
try {
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers));
}
X509TrustManager trustManager = (X509TrustManager) trustManagers[0];
SSLContext ssl = SSLContext.getInstance("TLSv1.2");
ssl.init(null, new TrustManager[] { trustManager }, new SecureRandom());
sslSocketFactory = ssl.getSocketFactory();
} catch (GeneralSecurityException e) {
throw new RuntimeException(e);
}
client = ClientBuilder.url(new URL(restServerURL)).username(userid)
.password(password).connectTimeout(60, TimeUnit.SECONDS).customSSLSocketFactory(sslSocketFactory)
.build();
Получена ошибка:
R java.lang.IllegalStateException: Unable to extract the trust manager on okhttp3.internal.platform.Platform@5194035f, sslSocketFactory is class com.ibm.jsse2.SSLSocketFactoryImpl
R at okhttp3.OkHttpClient$Builder.sslSocketFactory(OkHttpClient.java:654)
R at okhttp3.internal.huc.OkHttpsURLConnection.setSSLSocketFactory(OkHttpsURLConnection.java:63)
R at com.cloudant.http.internal.interceptors.SSLCustomizerInterceptor.interceptRequest(SSLCustomizerInterceptor.java:71)
R at com.cloudant.http.HttpConnection.execute(HttpConnection.java:290)
R at com.cloudant.client.org.lightcouch.CouchDbClient.execute(CouchDbClient.java:485)
R at com.cloudant.client.api.CloudantClient.executeRequest(CloudantClient.java:339)
R at com.cloudant.client.internal.views.ViewRequester.executeRequestWithResponseAsJson(ViewRequester.java:34)
R at com.cloudant.client.internal.views.ViewRequester.getResponseAsJson(ViewRequester.java:28)
R at com.cloudant.client.internal.views.ViewRequestImpl.getResponse(ViewRequestImpl.java:34)
R at com.profility.database.cloudant.CloudantConnector.getQuestionnaire(CloudantConnector.java:470)
R at com.profility.database.Database.getQuestionnaire(Database.java:159)
R at com.profility.questionnaire.QuestionnaireCache.getTheQuestionnaire(QuestionnaireCache.java:21)
R at com.profility.scheduer.ApplicationStarter.run(ApplicationStarter.java:31)
R at java.lang.Thread.run(Thread.java:812)