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