NPN和ALPN之间的区别以及如何在Apache / Nginx中启用ALPN

NPN(下一协议协商)和ALPN(应用层协议协商)都是TLS扩展。 由于https,SPDY和HTTP / 2在端口443上运行,因此客户端和服务器需要协商哪种应用程序层协议(纯http / 1.1在客户端和服务器之间建立SSL / TLS安全连接后使用的SPDY或HTTP / 2)。

NPN和ALPN之间的区别

SPDY使用NPN协商应用程序层协议,而HTTP / 2使用ALPN协商。 为了了解NPN和ALPN之间的区别,您必须对SSL / TLS握手的工作原理有基本的了解。

客户端和服务器建立SSL / TLS连接时,将同时使用NPN和ALPN。 ALPN避免了额外的往返行程,因为客户端在客户端问候消息中列出了客户端支持的应用程序层协议。 服务器选择一个协议并将其包含在服务器问候消息中。 在NPN中,服务器在服务器问候消息中列出受支持的协议,并让客户端进行选择。 ALPN是NPN的后继者。

Src:ietf.com

下面的wireshark捕获屏幕快照显示,客户端列出了三个协议h2,即spdy / 3.1和http / 1.1。

NPN和ALPN

而此Wireshark捕获的屏幕快照显示,服务器选择h2作为应用程序层协议。

ALPN服务器您好

如何启用ALPN

ALPN需要OpenSSL 1.0.2。 如今,大多数Linux服务器发行版都随附了更新得多的OpenSSL版本,例如Ubuntu 18.04上的OpenSSL 1.1.1。 您可以通过发出以下命令来检查服务器的OpenSSL版本:

$ openssl version

样本输出:

OpenSSL 1.1.1 11 Sep 2018

ALPN在HTTP / 2中使用,因此您需要在服务器上启用HTTP / 2。 请查看以下帖子,了解其操作方法。

  • 什么是SPDY和HTTP / 2,以及如何在Nginx上启用它们
  • 如何在Apache中启用HTTP / 2协议

如何在服务器上检查ALPN支持

在站点上启用HTTP / 2后,请转到https://tools.keycdn.com/http2-test来检查服务器是否支持ALPN。

检查ALPN支持

您还可以通过以下命令通过服务器测试ALPN支持:

echo | openssl s_client -alpn h2 -connect yourdomain.com:443 | grep ALPN

如果您的服务器不支持ALPN,那么您将看到 没有协商ALPN

Selection_035

如果您的服务器支持ALPN,那么您将获得 ALPN协议:h2

ALPN和NPN

包起来

我希望本文能帮助您了解NPN和ALPN之间的区别。 与往常一样,如果您发现此帖子有用,请订阅我们的免费新闻通讯以获取更多提示和技巧trick

Sidebar