java - netty sslcontextbuilder 收到 ClientHello 时服务器 sslcontext 异常
问题描述
缩小问题范围后编辑
我目前正在尝试在 FIPS 模式下(来自 bctls-fips 1.0.11)使用 Bouncycastle 的 JSSE 提供程序和 Java 15.0.1 上的 netty 的 sslbuildercontext(4.1.58.Final)来创建服务器 SSL 上下文。当服务器启动并绑定到一个端口时,在收到 ClientHello 时抛出以下异常:
io.netty.handler.codec.DecoderException: java.lang.NullPointerException: Cannot invoke "org.bouncycastle.tls.TlsContext.getSecurityParameters()" because the return value of "org.bouncycastle.tls.TlsProtocol.getContext()" is null
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:478)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
创建服务器 sslcontext 的代码如下:
val sslContext = SslContextBuilder.forServer(keyMgrFact)
.trustManager(trustMgrFact)
.keyManager(keyMgrFact)
.clientAuth(ClientAuth.REQUIRE)
.build
其中 keyMgrFact 和 trustMgrFact 利用 BCJSSE PXIK 实例。
我想知道我是否错过了在 sslcontextbuilder 上调用任何其他方法,因为问题似乎是 netty 没有正确使用 bouncycastle 设置底层 TLS 上下文。
解决方案
推荐阅读
- javascript - amazon-kinesis-video-streams-webrtc-sdk-js 是否支持 javascript v3 或 AWS Kinesis Video Client SDK v3?
- java - Spring Boot JPA OneToOne 参考 - 空参考的 TransientPropertyValueException
- plotly - 如何在 Plotly js 中从 Y 轴中删除重复值
- serilog - 带有 sink.MySQL 的自定义列 serilog
- node.js - 将 React js 应用程序与节点 js 服务器连接的最佳方式是什么?
- css - 如何定位另一个类中的其他 css 类?
- react-native - Expo无法连接到expo服务器
- jquery - 数据不会在 laravel 8 中使用 Ajax 加载到可搜索下拉选择框中
- grails - grails控制器上传文件
- azure - 如何更新托管标识以将 AKS 连接到 ACR