Java-клиент Cassandra с использованием openssl

Я пытаюсь подключиться к кластеру 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 или tcnative dep из pom, но это все еще не работает. Любая помощь будет принята с благодарностью.

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

Посмотрите, поможет ли это: github.com/netty/netty-tcnative/issues/331

Jayr 27.05.2019 17:56

@Jayr Спасибо за ваш ответ. Я использую последнюю версию, а также добавил netty-tcnative в свой файл dep. Не уверен, что еще я могу сделать, основываясь на проблеме с github.

Abhishek 27.05.2019 18:36

Вы включили трассировку? В потоке, которым поделились, в конце концов может появиться сообщение об успешной загрузке натива после того, как класс создал «так» во временной папке.

Jayr 27.05.2019 19:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
406
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

There are known runtime incompatibilities between newer versions of netty-tcnative and the version of netty that the driver uses. For best results, use version 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>

Создан datastax-oss.atlassian.net/browse/JAVA-2267, чтобы рассмотреть вопрос об обновлении зависимости netty 4.0.x драйвера Java, чтобы с ним работали более новые версии netty-tcnative.

Andy Tolbert 27.05.2019 19:15

Другие вопросы по теме