Как подключиться к любому кластеру Cassandra с поддержкой SSL с последней версией java -driver-core - PullRequest
0 голосов
/ 05 марта 2020

Мой кластер имеет следующие конфигурации

protocol: TLS
algorithm: SunX509
store_type: JKS

Ниже приведен код работающего драйвера 3.4 java.

Cluster.builder()
                .addContactPoints(hostNameList)
                .withCredentials(username, password)
                .withPort(port)
                .withSSL(getSslOptions()).build().connect();
 private static SSLOptions getSslOptions() throws NoSuchAlgorithmException, KeyManagementException {
        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(null, new TrustManager[]{new TrustAllX509TrustManager()}, new SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        HttpsURLConnection.setDefaultHostnameVerifier((string, ssls) -> true);
        return RemoteEndpointAwareJdkSSLOptions.builder().withSSLContext(sc).build();
    }
public class TrustAllX509TrustManager implements 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];
    }
}

Аналогично, я я пытаюсь с драйвером 4.5 java но я получаю сообщение об ошибке - com.datastax.oss.driver.api.core.AllNodesFailedException: не удалось связаться с любой точкой контакта

код

        CqlSession.builder()
                .withAuthCredentials(username, password)
                .addContactPoints(Arrays.stream(hostNameList).map(host -> new InetSocketAddress(host, port)).collect(Collectors.toList()))
                .withSslContext(getSslContext()).build();
    private SSLContext getSslContext() throws NoSuchAlgorithmException, KeyManagementException {
        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(null, new TrustManager[]{new TrustAllX509TrustManager()}, new SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        HttpsURLConnection.setDefaultHostnameVerifier((string, ssls) -> true);
        return sc;
    }

Мне нужен общий подход, поэтому я не передаю детали хранилища ключей.

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