Application-Layer Protocol Negotiation

Application-Layer Protocol Negotiation (ALPN) について



ALPN(Application-Layer Protocol Negotiation)は、TLS(Transport Layer Security)の拡張の一つであり、アプリケーション層でのプロトコルネゴシエーションを効率的に行うための仕組みです。TLSによるセキュアな通信において、どのアプリケーション層プロトコル(例えばHTTP/2|HTTP_2やHTTP/1.1など)を使用するかを決定する際に、不要な通信の往復(ラウンドトリップタイム)を削減し、アプリケーション層のプロトコルに依存しないネゴシエーションを可能にします。

ALPNの主な役割



効率的なプロトコル選択: 通信開始時に、クライアントとサーバーがサポートするプロトコルを事前に決定することで、無駄な通信を省きます。
柔軟なプロトコル対応: HTTP/2|HTTP_2のような新しいプロトコルや、その他のカスタムプロトコルにも対応可能で、柔軟なシステム構築を支援します。
セキュリティの向上: 近年では、ALPACAと呼ばれるクロスプロトコル攻撃への対策としても、ALPNの利用が推奨されています。これにより、より安全な通信が実現できます。

標準仕様



ALPNの仕様は、2014年7月11日にRFC 7301として公開され、インターネット標準として採用されています。

RFC 7301: ALPNの基本的な仕様を定義しています。
RFC 7639: HTTP CONNECTメソッドを使用する場合に、ALPN HTTPヘッダーを規定しています。

NPN(Next Protocol Negotiation)との関係



NPNは、ALPNと同様の目的で開発されたプロトコルネゴシエーションの拡張です。Google ChromeでTLSの高速化のために導入されたTLS False Startには、セキュリティ上の問題がありました。そのため、GoogleはNPNを開発し、Chrome 20以降でNPN対応サイト以外ではTLS False Startを無効化しました。

しかし、NPNは後にALPNに置き換えられました。Google Chromeはバージョン51でNPNのサポートを終了しています。

ALPNのサポート状況



ALPNは、以下の主要なライブラリでサポートされています。

GnuTLS: 3.2.0 (2013年5月リリース) 以降
MatrixSSL: 3.7.1 (2014年12月リリース) 以降
Network Security Services (NSS): 3.15.5 (2014年4月リリース) 以降
OpenSSL: 1.0.2 (2015年1月リリース) 以降
LibreSSL: 2.1.3 (2015年1月リリース) 以降
mbed TLS: 1.3.6 (2014年4月リリース) 以降
SChannel: 8.1 / 2012 R2以降

まとめ



ALPNは、TLSにおける重要な拡張機能であり、セキュアな通信における効率的なプロトコル選択を可能にします。HTTP/2|HTTP_2をはじめとする最新のプロトコルをサポートし、セキュリティ対策としてもその利用が推奨されています。また、NPNという前身技術から発展し、現在の標準となっています。

参考資料



RFC 7301: Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension
RFC 7639: The ALPN HTTP Header Field
NPN Google Technical Note
Transport Layer Security (TLS) Next Protocol Negotiation Extension draft-agl-tls-nextprotoneg-04

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。