![Ubuntu 17.04 netty-tcnative ALPN 不适用于 JDK SSL/TLS 引擎](https://linux22.com/image/706813/Ubuntu%2017.04%20netty-tcnative%20ALPN%20%E4%B8%8D%E9%80%82%E7%94%A8%E4%BA%8E%20JDK%20SSL%2FTLS%20%E5%BC%95%E6%93%8E.png)
我有一个使用 的 Java 应用程序(在 Oracle Java 下运行,但 OpenJDK 也出现了同样的问题)netty-tcnative
。它在 macOS 上运行没有问题,但当我尝试在 Ubuntu 17.04 上运行它时,出现以下异常:
SEVERE: ALPN not available for JDK SSL/TLS engine
io.vertx.core.VertxException: ALPN not available for JDK SSL/TLS engine
at io.vertx.core.net.impl.SSLHelper.resolveEngineOptions(SSLHelper.java:89)
at io.vertx.core.net.impl.SSLHelper.<init>(SSLHelper.java:150)
at io.vertx.grpc.VertxChannelBuilder.build(VertxChannelBuilder.java:148)
at uk.ashleybye.grpc.tls.Client.start(Client.kt:22)
at io.vertx.core.AbstractVerticle.start(AbstractVerticle.java:111)
at io.vertx.core.impl.DeploymentManager.lambda$doDeploy$8(DeploymentManager.java:434)
at io.vertx.core.impl.ContextImpl.lambda$wrapTask$2(ContextImpl.java:337)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:445)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
at java.lang.Thread.run(Thread.java:748)
netty-tcnative
需要openssl >= 1.0.2
和 Apache Portable Runtime。我有:
$ openssl version
OpenSSL 1.0.2g 1 Mar 2016
$ apt show libapr1
Package: libapr1
Version: 1.5.2-5
据我所知,libapr 的正确库位置是/usr/lib/x86_64-linux-gnu
:
$ dpkg -L libapr1
/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libapr-1.so.0.5.2
/usr/share
/usr/share/doc
/usr/share/doc/libapr1
/usr/share/doc/libapr1/changelog.Debian.gz
/usr/share/doc/libapr1/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/libapr1
/usr/lib/x86_64-linux-gnu/libapr-1.so.0
我试图将库添加到LD_LIBRARY_PATH
(如上所述这里),创建/etc/ld.so.conf.d/libapr.conf
并添加/usr/lib/x86_64-linux-gnu
。运行sudo ldconfig
,仍然没有任何效果。即使将其添加到标准路径也没有任何效果。
据我所知,我已遵循所有说明,但它仍然不起作用。更令人困惑的是,它在不同的操作系统上运行良好。值得一提的是,它netty-tcnative
需要特定于平台的二进制文件,我使用 gradle 的 googleosdetector
插件检测到了这一点。它检测到了 linux 二进制文件。但是,即使我使用,netty-tcnative-boring-static
我仍然会得到相同的异常。切换版本也无济于事(尽管 2x 版本无法在 maxOS 上运行,但使用 1.1.33.Fork26 可以)。我甚至从 apt 安装了libnetty-tcnative-java
和-jni
包,但仍然没有成功。
我完全不知所措,真的需要一些帮助才能让它工作。有什么建议吗?