【问题标题】:SslContext getInstance() is not finding the native openssl implementationSslContext getInstance() 未找到本机 openssl 实现
【发布时间】:2021-08-08 22:00:11
【问题描述】:

我正在尝试通过使用本机而不是 Java 实现来优化 TLS 加密数据传输,正如 Netty 所建议的那样。为简化起见,我使用“uber” static-boringssl jar 进行部署,如下所述:

https://netty.io/wiki/forked-tomcat-native.html#how-to-download-netty-tcnative-boringssl-uber-jar

我们的代码通过 SSLContext.getInstance() 加载 SslContext。如果不指定 Provider,它总是会找到 Java 实现,但指定 SslProvider.OPENSSL 会导致

java.security.NoSuchProviderException: no such provider: OPENSSL

以下是一个小型存储库,对问题进行了简单演示。包含的示例输出来自在 SL 7.9 上运行。 rpm 查询演示了节点上是否存在 openssl 库。测试代码还会在运行之前打印出类路径上的所有 Netty jar,可以看出,static-boringssl jar 就在那里。

https://github.com/alrossi/netty-tls-test

我想我在这里忽略了一些简单或明显的事情,但非常感谢您提供的任何帮助。

阿尔

【问题讨论】:

    标签: java openssl netty


    【解决方案1】:

    这些文档已经过时了。只需在构建SslContext 时指定SslProvider.OPENSSL

    SslContext sslCtx = SslContextBuilder.forServer(cert, key)
            .sslProvider(SslProvider.OPENSSL)
            .build();
    

    也就是说,只要它在你的类路径上,它也应该默认使用。

    【讨论】:

    • 天啊。 javax.net.ssl.SSLContext 与 io.netty.handler.ssl.SslContext。那是我的权利。谢谢。
    • 或使用,仍然是类路径中的库:``` java SslContext sslCtx = SslContextBuilder.forServer(cert, key) .sslProvider(SslContext.defaultClientProvider() // for c lient SslContext.defaultServerProvider( ) // 用于服务器 ) .build(); ```
    猜你喜欢
    • 2010-12-22
    • 1970-01-01
    • 2016-04-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多