Netty4单端口同时支持HTTP/HTTPS时可否在OptionalSslHandler后添加SniHandler
方案可行性结论
直接在
OptionalSslHandler之后追加SniHandler的方案不可行OptionalSslHandler的核心逻辑是先探测入站流量是否为TLS协议:如果判定为TLS流量,它会直接实例化SslHandler替换自身并触发TLS握手。此时后续的SniHandler已经无法获取到未经过SslHandler处理的原始ClientHello报文,也就无法解析SNI扩展完成多域名证书匹配。重写
OptionalSslHandler使其添加SniHandler而非默认SslHandler的方案完全可行,这也是Netty生态中实现单端口同时支持HTTP/HTTPS协议+SNI多域名证书适配的主流方案。
改造核心要点
你只需要修改OptionalSslHandler中判定为TLS流量后的分支逻辑:
- 原有逻辑:命中TLS流量时,直接创建
SslHandler加入Pipeline - 修改后逻辑:命中TLS流量时,创建你提前配置好SNI域名映射规则的
SniHandler加入Pipeline即可
SniHandler自身会完成ClientHello的SNI解析、匹配对应域名的SslContext、自动生成对应SslHandler处理后续TLS握手的全流程,无需额外修改其他逻辑,OptionalSslHandler原有对非TLS流量的透传能力也不会受到任何影响,完美实现你需要的"OptionalSniHandler"效果。
版本适配说明
该改造方案在Netty 4.1.x及以上稳定版本均可正常运行,无版本兼容性问题。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

