当前位置: 首页 > news >正文

【Netty源码解读和权威指南】第38篇:Netty SSL TLS安全传输——HTTPS背后的Netty实现

上一篇【第37篇】Netty流量整形——优雅控制客户端发送速率
下一篇【第39篇】Netty内存泄漏检测机制源码解析——守护ByteBuf的"生死账本"


一、TLS握手流程

客户端 服务端 |------ClientHello----------->| (支持的加密套件) |<-----ServerHello------------| (选定加密套件+证书) |<-----Certificate-----------| (服务端证书) |<-----ServerHelloDone-------| (握手完成) |------ClientKeyExchange----->| (加密的预主密钥) |------ChangeCipherSpec------>| (切换加密模式) |------Finished-------------->| |<-----ChangeCipherSpec-------| |<-----Finished---------------| | | |<====加密通信开始==============>|

二、SslContext配置

// 服务端SSL配置SelfSignedCertificatecert=newSelfSignedCertificate();SslContextsslCtx=SslContextBuilder.forServer(cert.certificate(),cert.privateKey()).sslProvider(SslProvider.OPENSSL)// 优先使用OpenSSL.build();// 客户端SSL配置SslContextclientCtx=SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE)// 仅测试用.build();

三、SslHandler集成

// 服务端Pipelinepipeline.addLast(sslCtx.newHandler(ch.alloc()));// SSL加解密pipeline.addLast(newHttpServerCodec());// HTTP编解码pipeline.addLast(newHttpServerHandler());// 业务逻辑// 客户端Pipelinepipeline.addLast(clientCtx.newHandler(ch.alloc(),host,port));pipeline.addLast(newHttpClientCodec());pipeline.addLast(newHttpClientHandler());

四、OpenSSL vs JDK SSL

对比JDK SSLOpenSSL
性能基准快2-3倍
内存堆内堆外(更少GC)
依赖需安装OpenSSL
支持全平台Linux最佳

启用OpenSSL

// pom.xml<dependency><groupId>io.netty</groupId><artifactId>netty-tcnative-boringssl-static</artifactId></dependency>// 代码配置.sslProvider(SslProvider.OPENSSL)

五、完整HTTPS服务器

publicclassHttpsServer{publicstaticvoidmain(String[]args)throwsException{SelfSignedCertificatecert=newSelfSignedCertificate();SslContextsslCtx=SslContextBuilder.forServer(cert.certificate(),cert.privateKey()).build();EventLoopGroupboss=newNioEventLoopGroup(1);EventLoopGroupworker=newNioEventLoopGroup();try{newServerBootstrap().group(boss,worker).channel(NioServerSocketChannel.class).childHandler(newChannelInitializer<Channel>(){protectedvoidinitChannel(Channelch){ch.pipeline().addLast(sslCtx.newHandler(ch.alloc()));ch.pipeline().addLast(newHttpServerCodec());ch.pipeline().addLast(newHttpServerExpectContinueHandler());ch.pipeline().addLast(newSimpleChannelInboundHandler<HttpRequest>(){protectedvoidchannelRead0(ChannelHandlerContextctx,HttpRequestreq){Stringbody="Hello HTTPS!";FullHttpResponseresp=newDefaultFullHttpResponse(HTTP_1_1,OK,ctx.alloc().buffer().writeBytes(body.getBytes()));resp.headers().set(CONTENT_LENGTH,body.length());resp.headers().set(CONTENT_TYPE,"text/plain");ctx.writeAndFlush(resp);}});}}).bind(8443).sync().channel().closeFuture().sync();}finally{boss.shutdownGracefully();worker.shutdownGracefully();}}}

六、总结

步骤配置
证书SelfSignedCertificate(测试) / CA证书(生产)
SslContextSslContextBuilder配置Provider和证书
集成SslHandler添加到Pipeline首位
性能建议生产环境使用OpenSSL Provider

上一篇【第37篇】Netty流量整形——优雅控制客户端发送速率
下一篇【第39篇】Netty内存泄漏检测机制源码解析——守护ByteBuf的"生死账本"


http://www.jsqmd.com/news/1050912/

相关文章:

  • 安徽省职教高考升学率高的学校选哪家?优质升学名校推荐合肥理工学校 - 教育为先
  • 2026杭州GEO优化公司深度横评:源头技术赋能,企业避坑选型全指南 - 品牌报告
  • 淮南师范学院王牌专业在全国 / 省内排名第几?行业认可度高吗? - 寻茫精选
  • 3.4.5 索引的设计原则
  • 上海大宅定制装修品牌推荐:2026六大品牌按需匹配指南 - 资讯速览
  • 合肥高科经济技工学校怎么报名?报名地址、咨询电话、线上预报名渠道一览 - 教育为先
  • 2026青岛公认口碑好的全屋定制品牌门店选购指南 - 官方资讯
  • 夜间野生动物YOLO分割数据集:17000张红外多干扰场景图像
  • 怎么查看电动餐桌厂商的真实案例、如何挑选合适的电动餐桌公司做为合适的长期供应商 - 岳灵峰电动餐桌
  • 嵌入式GUI开发:emWin 2D图形库核心功能与性能优化实战
  • 基于Appium的微信小程序自动化测试实战指南
  • 告别限速!九大网盘直链解析下载神器完整指南
  • 淮南师范学院王牌专业主要学什么课程?未来的培养方向和就业领域是什么? - 寻茫精选
  • 2026年合肥理工学校最新发布招生办电话号码及报考流程一览 - 教育为先
  • 嵌入式安全引擎驱动开发:从硬件加速原理到Linux/VxWorks跨平台实战
  • Mem Reduct终极指南:5步彻底解决Windows内存卡顿的免费神器
  • 洪梅镇TikTok短视频剪辑:新手必学的10个剪辑技巧 - 东莞选校指南
  • YOLOv8n轻量检测落地实战:从数据清洗到PyQt5工业级GUI
  • GEO源头厂家主体杭州爱搜索:企业AI搜索优化的底层逻辑与实战指南 - 品牌报告
  • 咸宁职业技术学院王牌专业在全国 / 省内排名第几?行业认可度高吗? - 寻茫精选
  • 自动驾驶导航系统四大核心能力:从感知到控制的完整技术闭环
  • 如何永久保存微信聊天记录?掌握数据主权的终极指南
  • 2026年浙江GEO优化服务商实力榜单|本地企业AI搜索优化首选指南 - 936品牌测评网
  • 咸宁职业技术学院的王牌专业有哪些?哪些专业性价比最高、最值得报? - 寻茫精选
  • 极限计算方法:从无穷逼近到求极限技巧(03)
  • 2026地下水位水温监测仪主流源头厂家排行与品牌选型推荐 - 王工聊地下水监测
  • RT-DETR实战解析:轻量Transformer实时目标检测落地指南
  • OpenHarmony Go 环境适配方案,手把手实现 三方库snowflake 雪花算法 ID 生成
  • 安徽水利水电职业技术学院王牌专业近三年的录取分数线大概是多少?位次要求是什么? - 寻茫精选
  • 基于图同构的大语言模型去偏技术解析