Application-Layer Protocol Negotiation

Application-Layer Protocol Negotiation (ALPN) は、Transport Layer Security (TLS) の拡張の一つである。アプリケーション層でのプロトコルネゴシエーションに関する拡張であり、セキュア通信においてアプリケーション層がどの通信プロトコルを使用するのかを決定する際に、余分なラウンドトリップタイムの発生を避け、アプリケーション層のプロトコルに依らずにネゴシエーションを行うことを可能とする。ALPNは主にSPDYおよびHTTP/2で利用されている。

2021年現在では、ALPACAと命名されたTLSにおけるクロスプロトコル攻撃の対策の1つとして、それ以外のアプリケーションプロトコルでもALPNの利用が推奨されている。

標準仕様 
2014年7月11日、ALPNの仕様はにてProposed standardとして公開されている。

HTTP CONNECTリクエストメソッドで通信を行う場合のため、ALPN HTTPヘッダーがで規定されている。

NPN 
Next Protocol Negotiation (NPN) はかつて開発されていたALPNと同目的の拡張である。

TLSの高速化を目的としてGoogle Chromeで従来有効化されていたTLS False Startにはバージョンロールバック攻撃が可能であるなどセキュリティ上の問題があることから、Googleは新たにNPNを提唱し、Chrome 20以降ではNPNに対応しているサイトを除いてはTLS False Startを無効化した。

NPNは後にALPNによって置き換えられた。Google Chromeでは、バージョン51でNPNへの対応が廃止となった。

サポート 
ALPNは以下のライブラリでサポートされている。
 GnuTLS 3.2.0（2013年5月リリース）以降
  3.7.1（2014年12月リリース）以降
 Network Security Services 3.15.5（2014年4月リリース）以降
 OpenSSL 1.0.2（2015年1月リリース）以降
 LibreSSL 2.1.3（2015年1月リリース）以降
  1.3.6（2014年4月リリース）以降
 SChannel 8.1 / 2012 R2以降

脚注

外部リンク 

  "Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension"
  The ALPN HTTP Header Field

NPN 
 NPN Google Technical Note
 Transport Layer Security (TLS) Next Protocol Negotiation Extension draft-agl-tls-nextprotoneg-04（NPNの最終草稿）

Transport Layer Security
7301
長大な項目名