Java-клиент Cassandra с использованием OpenSSL - PullRequest
1 голос
/ 27 мая 2019

Я пытаюсь подключиться к кластеру cassandra с помощью драйвера java datastax с openssl согласно этому документу https://docs.datastax.com/en/developer/java-driver/3.1/manual/ssl/ с моим клиентским сертификатом и ключом и складом доверенных сертификатов, так как мой кластер cassandra требует двусторонней взаимной проверки подлинности с сертификатом

Вот мой код

public static void main( String[] args ) throws Exception
    {
        KeyStore ks = KeyStore.getInstance("JKS");
        // make sure you close this stream properly (not shown here for brevity)
        InputStream trustStore = new FileInputStream("MyTrustStore");
        ks.load(trustStore, "abcdef".toCharArray());
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(ks);

        SslContextBuilder builder = SslContextBuilder
          .forClient()
          .sslProvider(SslProvider.OPENSSL)
          .trustManager(tmf)
          // only if you use client authentication
          .keyManager(new File("client_cert"), new File("private_key"));


        SSLOptions sslOptions = new NettySSLOptions(builder.build());


        Cluster cluster = Cluster.builder()
          .addContactPoint("w.x.y.z")
          .withSSL(sslOptions)
          .build();


    }

со следующими зависимостями в моем pom

<dependencies>
        <dependency>
            <groupId>com.datastax.cassandra</groupId>
            <artifactId>cassandra-driver-core</artifactId>
            <version>3.6.0</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-tcnative</artifactId>
            <version>2.0.25.Final</version>
        </dependency>

        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-tcnative-boringssl-static</artifactId>
            <version>2.0.0.Final</version>
            <classifier>osx-x86_64</classifier>
        </dependency>
</dependencies>

Но я получаю ошибку как

Exception in thread "main" java.lang.UnsatisfiedLinkError: failed to load the required native library
    at io.netty.handler.ssl.OpenSsl.ensureAvailability(OpenSsl.java:327)
    at io.netty.handler.ssl.ReferenceCountedOpenSslContext.<init>(ReferenceCountedOpenSslContext.java:193)
    at io.netty.handler.ssl.ReferenceCountedOpenSslContext.<init>(ReferenceCountedOpenSslContext.java:182)
    at io.netty.handler.ssl.OpenSslContext.<init>(OpenSslContext.java:34)
    at io.netty.handler.ssl.OpenSslClientContext.<init>(OpenSslClientContext.java:188)
    at io.netty.handler.ssl.SslContext.newClientContextInternal(SslContext.java:775)
    at io.netty.handler.ssl.SslContextBuilder.build(SslContextBuilder.java:446)
    at com.example.App.main(App.java:41)
Caused by: java.lang.IllegalArgumentException: Failed to load any of the given libraries: [netty_tcnative_osx_x86_64, netty_tcnative_x86_64, netty_tcnative]
    at io.netty.util.internal.NativeLibraryLoader.loadFirstAvailable(NativeLibraryLoader.java:93)
    at io.netty.handler.ssl.OpenSsl.loadTcNative(OpenSsl.java:421)
    at io.netty.handler.ssl.OpenSsl.<clinit>(OpenSsl.java:89)
    ... 7 more

Я пытался удалить boringssl-static dep или tcnative dep из pom, но он все еще не работает. Любая помощь будет принята с благодарностью.

Заранее спасибо

1 Ответ

2 голосов
/ 27 мая 2019

Я подозреваю, что то, что здесь может произойти, вызвано некоторой несовместимостью между версиями netty, netty-tcnative и netty-tcnative-boringssl-static, используемыми здесь.

В предыдущих экспериментах я обнаружил, что версииnetty и netty-tcnative особенно важны, так как между ними могут быть несовместимости.

datastax java драйвер 3.6.0 зависит от netty 4.0.56.Final и перечисляет netty-tcnative 2.0.7.Finalкак необязательная зависимость.Вы также можете найти в документации для java драйвера 3.6.0, что рекомендуется 2.0.7. Финал:

Существуют известные несовместимости во время выполнения между более новыми версиями netty-tcnative иверсия netty, которую использует драйвер.Для достижения наилучших результатов используйте версию 2.0.7.Final.

Я также подозреваю, что не использование одной и той же версии netty-tcnative и netty-tcnative-boringssl-static может привести к несовместимости.Я бы порекомендовал попробовать те же версии.

Поскольку я это проверил, я сначала попробовал бы следующую конфигурацию:

<dependencies>
    <dependency>
        <groupId>com.datastax.cassandra</groupId>
        <artifactId>cassandra-driver-core</artifactId>
        <version>3.6.0</version>
    </dependency>
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-tcnative</artifactId>
        <version>2.0.7.Final</version>
    </dependency>
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-tcnative-boringssl-static</artifactId>
        <version>2.0.7.Final</version>
        <classifier>osx-x86_64</classifier>
    </dependency>
</dependencies>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...