0

问题 1)如何让 netty-tcnative 使用非默认的 openssl 引擎?就我而言,我正在尝试 cloudhsm 引擎。有没有人以类似的方式加载这个引擎或任何其他引擎的经验。我在下面记录了我遇到的问题。

问题2) netty-tcnative在日志中初始化时报告的openssl版本是否应该与本机openssl安装版本匹配?我希望它不会在我的情况下。也许这是相关的,我不确定。

更多细节 我有一个可以访问 AWS cloudHSM 的 docker 容器。我可以在命令行中使用 openssl 在容器中使用 openssl 和 cloudhsm。

[root@1f094ffd14e4 ob-shell]# openssl engine
(rdrand) Intel RDRAND engine
(dynamic) Dynamic engine loading support

[root@1f094ffd14e4 ob-shell]# openssl engine cloudhsm
(cloudhsm) CloudHSM hardware engine support

一切都按我的预期工作。本机 openssl 版本为1.0.2k-fips

[root@1f094ffd14e4 ob-shell]# openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

我需要一个使用 netty-tcnative 的 Java 应用程序来使用 openssl 访问 HSM。我不能使用 JCE 方法,因为它不适用于 JDK > JDK8。AWS 不支持 JDK11/JDK17。

我正在使用 netty-tcnative 的动态链接版本。

    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-tcnative</artifactId>
        <classifier>linux-x86_64-fedora</classifier>
        <version>2.0.38.Final</version>
    </dependency>

这很好用,我可以在使用默认引擎时看到 netty openssl 配置的详细信息。

2021-09-02 13:07:45.905 DEBUG 7 --- [main] io.netty.handler.ssl.OpenSsl:使用引擎初始化 netty-tcnative:'default' 2021-09-02 13:07:45.906 DEBUG 7 --- [
main] io.netty.handler.ssl.OpenSsl:netty-tcnative 使用本机库:OpenSSL 1.0.1e-fips 2013 年 2 月 11 日

但是要使用 HSM,我需要使用 cloudhsm 引擎。这就是麻烦开始的地方。当我尝试使用以下系统属性-Dio.netty.handler.ssl.openssl.engine=cloudhsm启用 cloudhsm 引擎时,我遇到了问题。cloudhsm 引擎根本不加载。

2021-09-02 17:19:49.433 DEBUG 7 --- [main] inutil.internal.NativeLibraryLoader :成功加载库 /tmp/libnetty_tcnative_linux_x86_64569349996051888224.so 2021-09-02 17:19:49.434 DEBUG 7 --- [ main] io.netty.handler.ssl.OpenSsl:使用引擎初始化 netty-tcnative:'cloudhsm' 从库中读取非 fips 摘要方法时出错。缓存软件摘要时出错。动态引擎:cloudhsm 加载失败 2021-09-02 17:19:49.437 调试 7 --- [
main] io.netty.handler.ssl.OpenSsl:初始化 netty-tcnative 失败;OpenSslEngine 将不可用。有关更多信息,请参阅 https://netty.io/wiki/forked-tomcat-native.html

java.lang.Exception: io.netty.internal.tcnative.SSL.initialize(Native Method)~[netty-tcnative-2.0.38.Final-linux-x86_64-fedora.jar这个平台没有实现这个功能:na] 在 io.netty.internal.tcnative.Library.initialize(Library.java:158) ~[netty-tcnative-2.0.38.Final-linux-x86_64-fedora.jar:na] 在 io.netty.handler .ssl.OpenSsl.initializeTcNative(OpenSsl.java:597) ~[netty-handler-4.1.63.Final.jar:4.1.63.Final] at io.netty.handler.ssl.OpenSsl.(OpenSsl.java:153 ) ~[netty-handler-4.1.63.Final.jar:4.1.63.Final] 在 io.netty.handler.ssl.ReferenceCountedOpenSslContext.(ReferenceCountedOpenSslContext.java:207) ~[netty-handler-4.1.63.Final .jar:4.1.63.Final] 在 io.netty.handler.ssl.OpenSslContext.(OpenSslContext.java:36) ~[netty-handler-4.1.63.Final.jar:4.1.63.Final] 在 io。 netty.handler.ssl.OpenSslClientContext.(OpenSslClientContext.java:191) ~[netty-handler-4.1.63.Final.jar:4.1.63.Final] at io.netty.handler.ssl.SslContext.newClientContextInternal(SslContext.java:830) ~[netty-handler-4.1 .63.Final.jar:4.1.63.Final] 在 io.netty.handler.ssl.SslContextBuilder.build(SslContextBuilder.java:614) ~[netty-handler-4.1.63.Final.jar:4.1.63. Final] at com.me.commands.NettyCommands.experiment(NettyCommands.java:44) ~[classes/:1.0-SNAPSHOT] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na: na] 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.util.ReflectionUtils。调用方法(ReflectionUtils.java:282)~[spring-core-5.3.6.jar:5.3.6] at org.springframework.shell.Shell.evaluate(Shell.java:169)~[spring-shell-core-2.0 .0.RELEASE.jar:2.0.0.RELEASE] 在 org.springframework.shell.Shell.run(Shell.java:134) ~[spring-shell-core-2.0.0.RELEASE.jar:2.0.0. RELEASE] 在 org.springframework.shell.jline.InteractiveShellApplicationRunner.run(InteractiveShellApplicationRunner.java:84) ~[spring-shell-core-2.0.0.RELEASE.jar:2.0.0.RELEASE] 在 org.springframework.boot。 SpringApplication.callRunner(SpringApplication.java:810) ~[spring-boot-2.4.5.jar:2.4.5] at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:800) ~[spring-boot-2.4 .5.jar:2.4.5] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:346) ~[spring-boot-2.4.5.jar:2.4.5] 在 org.springframework.boot.SpringApplication .运行(SpringApplication.java:1340)~[spring-boot-2.4.5.jar:2.4.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329)~[spring-boot-2.4.5 .jar:2.4.5] at com.me.Application.main(Application.java:41) ~[classes/:1.0-SNAPSHOT] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~ [na:na] 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java :43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner .java:49) ~[ob-shell/:na] at org.springframework.boot.loader.Launcher.launch(Launcher.java:108) ~[ob-shell/:na] at org.springframework.boot.loader .Launcher.launch(Launcher.java:58) ~[ob-shell/:na] at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88) ~[ob-shell/:na]

有任何想法吗?

4

0 回答 0