当前位置: 首页 > 网络应用技术

Netty系列:让TLS支持HTTP2

时间:2023-03-06 12:34:57 网络应用技术

  我们知道,尽管HTTP2协议不会强制使用HTTPS,但对于大多数浏览器,如果要使用HTTP2,则必须使用HTTPS,因此我们需要了解如何支持Netty的TLS中的HTTP2。

  HTTP2协议是从SPDY协议开发的。SPDY和HTTP2都开发了TLS协议扩展,以便在HTTPS的环境中工作。

  它们称为NPN(下一个协议协商)和ALPN(应用程序层协议协议)。

  他们规定,在TLS协议握手之后,客户和服务器方协议将应用于客户端和服务器。客户支持它。可以直接选择服务器端,因此它可以比NPN少一个交互过程,这更好。

  那么SPDY和HTTP2支持什么协议?

  Netty提供了一个ApplicationProtocolnames类,该类定义其相应的协议,其中ALPN对应于HTTP2和HTTP1.1,SYDY对应于SPDY/1,SPDY/2,SPDY/2,SPDY/3:

  目前,Netty中有两种SSL实现方法,一种是JDK,另一个是OpenSSL。对TLS协议扩展的不同实施方法的支持是不同的。它提供了一种iSALPNSPOPTRAPT的方法来判断它是否基于传输到提供商的差异来支持ALPN。

  如果您使用的是JDK8,则在运行后,您可以获得以下错误提示:

  换句话说,如果JDK使用JDK作为默认的SSL提供程序,则不支持ALPN。必须将其升级到JAVA9。

  根据提示,如果将征服者添加到classpath:

  运行后,您将获得以下错误:

  如何做?答案是使用开放式SSL,您需要添加:

  测试后,它是完美执行的。

  如果将协议配置类传递给SSLENGINE,则ApplicationProtocolConfig是NetTy。它主要具有四个属性:

  SupportedProtocols是一个支持数据传输协议,例如HTTP2,HTTP1.1或SPDY/1,SPDY/2,SPDY/3等。

  协议是TLS扩展协议,例如ALPN或NPN。

  SelectorBehavior是表达协议的一种方式。有3种方法:

  FATAL_ALERT:如果找不到应用程序协议的节点,握手将失败。NO_ADVERTISE:如果找不到应用程序协议的节点,它将找不到匹配项,它将假装不支持握手中的TLS扩展.choose_my_last_protocol:如果选择应用程序协议的节点找不到匹配项,则上次使用推荐的协议。

  SelectedBehavior是通知选定协议的一种方式。也有3种方法:

  接受:如果节点不支持其他节点选择的应用程序协议,则节点不支持TLS扩展名,然后继续握手。Fatal_alert:如果节点不支持对方的应用程序协议节点选择,握手失败。CHOOSE_MY_LAST_PROTOCOL:如果节点不支持其他节点选择的应用,则上次使用推荐的协议。

  使用提供商,ApplicationProtocolConfig可以构建sslcontext.first create ssl Provider:

  默认情况下,将JDK用作SSL提供商。如果您使用的是OpenSSL,则可以使用OpenSSL。

  我们使用sslContextBuilder.forserver创建SSLContext。此方法需要传递给认证和私人关键。为简单起见,我们使用自我签名的自我签名:

  您还可以为SSLPROVIDER,密码和Application ProtocolConfig以及其他信息设置信息:

  最后,我们需要根据谈判所使用的不同方案处理不同的治疗方法。Netty提供了一个应用程序colotocolnegotiandhandler。如果您自定义,则只需要继承此类即可。例如,我们根据协议的名称处理HTTP1和HTTP2请求:

  然后将其添加到频道私线:

  以上是支持TLS支持Netty中HTTP2的完整过程。

  本文的示例可以参考:Learn-netty4

  最受欢迎的解释,最深的干货,最简单的教程,您不知道的许多技巧正在等待您发现!

  欢迎注意我的公共帐户:“程序的事情”,了解技术并更好地了解您!