Netty中SslHandler的握手过程是否会经过所有客户端/服务端pipeline处理器?
问题结论
你的猜测完全正确,TLS握手的交互消息不会被SslHandler传递给后续的业务ChannelHandler。
核心逻辑说明
- SslHandler默认会拦截所有握手阶段的网络报文,不会调用
fireChannelRead()向后传播事件,直到整个握手流程完全结束,才会将解密后的业务报文传递给Pipeline后续的decoder、业务处理器等节点。 - 握手阶段的所有交互逻辑都由SslHandler内部的SSLEngine独立完成,对上层处理器完全透明,上层只会在握手成功后收到解密后的纯业务数据,握手失败会直接触发链路异常关闭事件。
额外补充说明
- 如果你将日志、埋点类Handler配置在SslHandler的入站方向前方(也就是Pipeline中比SslHandler更靠近网络侧的位置),这些Handler是可以捕获到原始的TLS握手二进制报文的,只有SslHandler之后的处理器才会完全感知不到握手交互的存在。
- 如果需要感知握手完成的时机,可以在自定义Handler中重写
userEventTriggered方法,监听SslHandshakeCompletionEvent事件,该事件会在握手成功或失败后在整个Pipeline中传播。
内容的提问来源于stack exchange,提问作者user2104560
相关产品推荐
相关产品推荐

