我们知道,尽管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
最受欢迎的解释,最深的干货,最简单的教程,您不知道的许多技巧正在等待您发现!
欢迎注意我的公共帐户:“程序的事情”,了解技术并更好地了解您!