Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用openssl的cassandra java客户端_Java_Cassandra_Openssl - Fatal编程技术网

使用openssl的cassandra java客户端

使用openssl的cassandra java客户端,java,cassandra,openssl,Java,Cassandra,Openssl,我正试图通过java datastax驱动程序和openssl连接到cassandra群集,根据此文档,使用我的客户端证书和密钥以及信任库,因为我的cassandra群集需要双向相互证书身份验证 这是我的密码 publicstaticvoidmain(字符串[]args)引发异常 { KeyStore ks=KeyStore.getInstance(“JKS”); //确保正确关闭此流(为简洁起见,此处未显示) InputStream trustStore=新文件InputStream(“MyT

我正试图通过java datastax驱动程序和openssl连接到cassandra群集,根据此文档,使用我的客户端证书和密钥以及信任库,因为我的cassandra群集需要双向相互证书身份验证

这是我的密码

publicstaticvoidmain(字符串[]args)引发异常
{
KeyStore ks=KeyStore.getInstance(“JKS”);
//确保正确关闭此流(为简洁起见,此处未显示)
InputStream trustStore=新文件InputStream(“MyTrustStore”);
load(信任库,“abcdef”.toCharArray());
TrustManagerFactory tmf=TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);
SslContextBuilder=SslContextBuilder
.forClient()
.sslProvider(sslProvider.OPENSSL)
.trustManager(tmf)
//仅当您使用客户端身份验证时
.keyManager(新文件(“客户证书”)、新文件(“私钥”);
SSLOptions SSLOptions=新的NetySloptions(builder.build());
Cluster Cluster=Cluster.builder()
.addContactPoint(“w.x.y.z”)
.使用SSL(开发)
.build();
}
在我的pom中具有以下依赖项


com.datasax.cassandra
卡桑德拉驱动核心
3.6.0
伊奥·内蒂
内蒂
2.0.25.1决赛
伊奥·内蒂
netty Tcing boringssl静态
2.0.0.1决赛
osx-x86_64
但是我得到了一个错误

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
线程“main”java.lang.UnsatisfiedLinkError中出现异常:未能加载所需的本机库 位于io.netty.handler.ssl.OpenSsl.ensureAvailability(OpenSsl.java:327) 位于io.netty.handler.ssl.ReferenceCountedOpenSslContext。(ReferenceCountedOpenSslContext.java:193) 位于io.netty.handler.ssl.ReferenceCountedOpenSslContext。(ReferenceCountedOpenSslContext.java:182) 在io.netty.handler.ssl.OpenSslContext.(OpenSslContext.java:34) 位于io.netty.handler.ssl.OpenSslClientContext。(OpenSslClientContext.java:188) 位于io.netty.handler.ssl.SslContext.newClientContextInternal(SslContext.java:775) 位于io.netty.handler.ssl.SslContextBuilder.build(SslContextBuilder.java:446) 位于com.example.App.main(App.java:41) 原因:java.lang.IllegalArgumentException:未能加载任何给定库:[netty\u tcnative\u osx\u x86\u 64,netty\u tcnative\u x86\u 64,netty\u tcnative] 位于io.netty.util.internal.NativeLibraryLoader.loadFirstAvailable(NativeLibraryLoader.java:93) 位于io.netty.handler.ssl.OpenSsl.loadTcNative(OpenSsl.java:421) 在io.netty.handler.ssl.OpenSsl.(OpenSsl.java:89) ... 还有7个 我已经尝试从pom中删除boringssl静态dep或tcnative dep,但它似乎仍然不起作用。任何帮助都将不胜感激


提前感谢您

我怀疑这里可能发生的事情是由这里使用的
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.Final:

较新版本的netty tcnative与驱动程序使用的netty版本之间存在已知的运行时不兼容。为获得最佳结果,请使用2.0.7.Final版本

我还怀疑不使用相同版本的
netty tcnative
netty tcnative boringssl static
可能会导致不兼容。我建议尝试相同的版本

既然我已经测试过了,我将首先尝试以下配置:


com.datasax.cassandra
卡桑德拉驱动核心
3.6.0
伊奥·内蒂
内蒂
2.0.7.1最终版本
伊奥·内蒂
netty Tcing boringssl静态
2.0.7.1最终版本
osx-x86_64

看看这是否有帮助:@Jayr感谢您的回复。我使用的是最新版本,并且在我的dep中添加了netty tcnative。不确定基于github问题我还能做些什么。您启用了跟踪吗?在共享的线程中,在创建了“临时”文件夹中的“SO”之后,可能会有一个消息,关于在该类中创建成功的“java”,以考虑升级Java驱动程序的NETY 4×x依赖性,因此NETTY TCNEATE的新版本将与之协同工作。