使用Netty实现HTTPS

之前的文章理解Https中,介绍了HTTP到HTTPS的演进过程,我们也可以得到一个结论:HTTPS = HTTP + 加密 + 身份认证 + 报文正确性保障。其实也就是在HTTP层和TCP层之间新增一个步骤,通过证书交换通信秘钥并验证客户端服务端身份的合法性(SSL)。所以为了实现HTTPS,必须支持SSL。

为了支持SSL,Java提供了 javax.net.ssl 包,它的SSLContext 和SSLEngine类使得解密和加密相当简单和高效。Netty提供了基于SSLEngine的实现OpenSSL用于支持SSL。OpenSSL工具包比JDK提供的SSLEngine具有更好的性能。

1. SslHandler

Netty通过一个名为SslHandler的ChannelHandler实现HTTPS报文加密和解密的功能,其中SslHandler在内部使用SSLEngine来完成实际的工作,SSLEngine的实现可以是JDK的SSLEngine,也可以是Netty 的OpenSslEngine,这里推荐使用Netty的OpenSslEngine,因为它性能更好,通过SslHandler进行解密和加密的过程如下图所示:

大多数情况下,SslHandler将是ChannelPipeline中的第一个ChannelHandler。这确保了只有在所有其他的ChannelHandler将它们的逻辑应用到数据之后,才会进行加密。

2. HTTP编码器、解码器

Netty为HTTP消息提供了ChannelHandler编码器和解码器:

  • HttpRequestEncoder: 编码器,用于客户端,向服务器发送请求
  • HttpResponseEecoder: 编码器,用于服务端,向客户端发送响应
  • HttpResponseDecoder: 解码器,用于客户端,接收来自服务端的请求
  • HttpRequestDecoder:解码器,用于服务端,接收来自客户端的请求

除了独立的编码器、解码器,Netty还提供了编解码器:

  • HttpClientCodec: 用于客户端的编解码器,等效于HttpRequestEncoder和HttpResponseDecoder的组合
  • HttpServerCodec:用于服务端的编解码器,等效于HttpRequsetDecoder和 HttpResponseEncoder的组合

HttpServerCodec同时实现了ChannelInboundHandler和ChannelOutboundHandler,所以具备服务端编码和解码能力。

3. 聚合器

上述解码器会将每个HTTP消息中生成多个消息对象,如HttpRequest、HttpResponse,HttpContent、LastHttpContent,使用聚合器可以将多个消息体合并为一个FullHttpRequest或者FullHttpResponse消息,便于处理请求和响应。Netty提供了HttpObjectAggregator聚合器完成该工作。

4. 代码实现

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Netty是一个异步非阻塞的事件驱动型的网络应用程序框架,可以用于实现Socket。Socket是计算机网络中运输层的TCP协议的抽象,用于实现不同应用程序进程或网络连接之间的通信。在Netty中,我们可以使用其提供的API进行网络编程,包括建立Socket连接、读写数据等操作。Netty框架简化了网络编程的复杂性,提供了高性能、方便开发的NIO(非阻塞IO)解决方案,可以用于快速开发高性能的协议服务器和客户端。所以,Netty可以实现Socket编程,并且是一个被广泛使用的网络应用程序框架。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Netty进行Socket编程(一)](https://blog.csdn.net/Solo_two/article/details/78394823)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [spring boot 整合的netty 实现的socket的服务端和客户端](https://download.csdn.net/download/qq_28898309/11166535)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值