アプリケーション層プロトコルネゴシエーション(ALPN)は、トランスポート層セキュリティ(TLS)の拡張機能であり、アプリケーション層が、追加のラウンドトリップを回避し、アプリケーション層プロトコルに依存しない方法で、セキュアな接続上でどのプロトコルを実行するかをネゴシエートできるようにします。これは、追加のラウンドトリップなしでHTTP/2接続を確立するために使用されます(クライアントとサーバーは、以前にHTTPSに割り当てられていた2つのポートを介してHTTP/1.1で通信し、最初の接続を閉じることなくHTTP/2を使用するようにアップグレードするか、HTTP/1.1を継続することができます)。
ALPNは以下のライブラリによってサポートされています。
2010 年 1 月に、Google は Next Protocol Negotiation TLS 拡張機能を記述した IETF 標準ドラフトを発表しました。[ 14 ]この拡張機能は、Google Chrome と一部の Google サーバー間の実験的な SPDY 接続のネゴシエーションに使用されました。SPDY が進化するにつれて、NPN は ALPN に置き換えられました。
2014年7月11日、ALPNはRFC 7301として公開されました。ALPNはNext Protocol Negotiation(NPN)拡張機能に取って代わるものです。[ 15 ]
Google Chromeでは、以前のNPN拡張機能を持つウェブサイトを除き、バージョン20(2012年)以降、TLS False Startが無効化されました。 [ 16 ]
ALPNはTLS拡張機能であり、最初のTLSハンドシェイク「Client Hello」で送信され、クライアント(例えばWebブラウザ)がサポートするプロトコルを一覧表示します。
ハンドシェイクタイプ: Client Hello ( 1 )長さ: 141バージョン: TLS 1.2 ( 0x0303 )ランダム: dd67b5943e5efd0740519f38071008b59efbd68ab3114587 ...セッションID長さ: 0暗号スイート長さ: 10暗号スイート( 5スイート)圧縮方式長さ: 1圧縮方式( 1方式)拡張機能長さ: 90 [その他の拡張機能は省略]拡張機能: application_layer_protocol_negotiation ( len = 14 )タイプ: application_layer_protocol_negotiation ( 16 )長さ: 14 ALPN拡張機能長さ: 12 ALPNプロトコルALPN文字列の長さ: 2 ALPN次のプロトコル: h2 ALPN文字列の長さ: 8 ALPN次のプロトコル: http / 1 . 1ウェブサーバーから返される「Server Hello」メッセージにはALPN拡張機能も含まれており、HTTPリクエストに使用されるプロトコルが確認できます。
ハンドシェイクタイプ: Server Hello ( 2 )長さ: 94バージョン: TLS 1.2 ( 0x0303 )ランダム: 44 e447964d7e8a7d3b404c4748423f02345241dcc9c7e332 ...セッションID長さ: 32セッションID : 7667476 d1d698d0a90caa1d9a449be814b89a0b52f470e2d ...暗号スイート: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ( 0xc02f )圧縮方式: null ( 0 )拡張機能の長さ: 22 [その他の拡張機能は省略]拡張機能: application_layer_protocol_negotiation ( len = 5 )タイプ: application_layer_protocol_negotiation ( 16 )長さ: 5 ALPN拡張機能の長さ: 3 ALPNプロトコルALPN文字列の長さ: 2 ALPN次のプロトコル: h2