Hi,

I referred to this link
https://docs.datastax.com/en/developer/java-driver/3.0/manual/ssl/
<https://docs.datastax.com/en/developer/java-driver/3.0/manual/ssl/>  to
implement a simple Cassandra client using datastax driver 3.0.0 on SSL with
OpenSSL options but unable to run it.

Getting generic exception as "
*com.datastax.driver.core.exceptions.NoHostAvailableException"
*at line
mySession = myCluster.connect();

*Code snippet to setup cluster connection is below.*

    public void connectToCluster()
    {
        String[] theCassandraHosts = {"myip"};
        myCluster =

Cluster.builder().withSSL(getSSLOption()).withReconnectionPolicy(new
ConstantReconnectionPolicy(2000)).addContactPoints(theCassandraHosts).withPort(10742)
                        .withCredentials("username",
"password").withLoadBalancingPolicy(DCAwareRoundRobinPolicy.builder().build())
                        .withSocketOptions(new
SocketOptions().setConnectTimeoutMillis(800).setKeepAlive(true)).build();
        try {
        mySession = myCluster.connect();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        System.out.println("Session Established");
    }


 private SSLOptions getSSLOption()
    {
        InputStream trustStore = null;
        try
        {
            String theTrustStorePath =
"/var/opt/SecureInterface/myTrustStore.jks";
            String theTrustStorePassword = "mypassword";
            List<String> theCipherSuites = new ArrayList<String>();
            theCipherSuites.add("TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384");
            KeyStore ks = KeyStore.getInstance("JKS");
*            trustStore = new FileInputStream(theTrustStorePath);*
            ks.load(trustStore, theTrustStorePassword.toCharArray());
            TrustManagerFactory tmf =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            tmf.init(ks);
            SslContextBuilder builder =
                    SslContextBuilder.forClient()
                            .sslProvider(SslProvider.OPENSSL)
                            .trustManager(tmf)
                            .ciphers(theCipherSuites)
                            // only if you use client authentication
                            .keyManager(new
File("/var/opt/SecureInterface/keystore/Cass.crt"),
                                    new
File("/var/opt/vs/SecureInterface/keystore/Cass_enc.key"));
            SSLOptions sslOptions = new NettySSLOptions(builder.build());
            return sslOptions;
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                trustStore.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
        return null;
    }

Cassandra server is running fine with client and server encryption options.
Moreover  I am able to run my client using JdkSSLOptions but have problem
with NettySSLOptions.

Has anyone implemented the  NettySSLOptions for Cassandra client
application?


Regards,
Jahar Tyagi

Reply via email to