アプリケーション層プロトコル ネゴシエーション( ALPN ) は、トランスポート層セキュリティ(TLS) 拡張機能であり、アプリケーション層が、追加のラウンド トリップを回避し、アプリケーション層プロトコルから独立した方法で、安全な接続を介してどのプロトコルを実行するかをネゴシエートできるようにします。これは、追加のラウンド トリップなしでHTTP/2接続を確立するために使用されます (クライアントとサーバーは、 HTTP/1.1で以前に HTTPS に割り当てられた 2 つのポートを介して通信し、HTTP/2 を使用するようにアップグレードするか、初期接続を閉じることなく HTTP/1.1 を続行できます)。
サポート
ALPN は次のライブラリでサポートされています:
- BSAFE Micro Edition Suiteバージョン5.0以降[1]
- GnuTLSバージョン3.2.0(2013年5月リリース)[2]
- MatrixSSLバージョン3.7.1(2014年12月リリース)[3]
- 2014年4月にリリースされたバージョン3.15.5以降のネットワークセキュリティサービス[4]
- OpenSSLバージョン1.0.2(2015年1月リリース)[5]
- LibreSSLバージョン2.1.3は2015年1月にリリースされた[6]
- mbed TLS(旧PolarSSL)バージョン1.3.6(2014年4月リリース)[7]
- s2n は、2015 年 6 月の最初の公開リリース以来、
- wolfSSL(旧CyaSSL)バージョン3.7.0(2015年10月リリース)[8]
- Go(標準ライブラリcrypto/tlsパッケージ)バージョン1.4(2014年12月リリース)[9]
- JSSEは2017年9月にリリースされたJDK 9以降Javaに組み込まれており、[10] 2020年4月にリリースされたJDK 8にバックポートされました[11]
- Windows 8.1およびWindows Server 2012 R2が2013年10月18日にリリースされて以来のWin32 SSPI [12]
歴史
次のプロトコル交渉
2010年1月、GoogleはNext Protocol Negotiation TLS拡張機能を記述したIETF標準ドラフトを導入しました。[13]この拡張機能は、Google Chromeと一部のGoogleサーバー間の実験的なSPDY接続をネゴシエートするために使用されました。SPDYが進化するにつれて、NPNはALPNに置き換えられました。
アプリケーション層プロトコルネゴシエーション
2014年7月11日、ALPNはRFC 7301として公開されました。ALPNはNext Protocol Negotiation (NPN)拡張に代わるものです。[14]
TLS False Startは、以前のNPN拡張機能を備えたウェブサイトを除き、Google Chromeバージョン20(2012年)以降では無効になっています。 [15]
例
ALPN は、最初のTLS ハンドシェイク「Client Hello」で送信される TLS 拡張機能であり、クライアント (Web ブラウザなど) がサポートするプロトコルをリストします。
ハンドシェイクタイプ: Client Hello ( 1 )長さ: 141バージョン: TLS 1.2 ( 0x0303 )ランダム: dd67b5943e5efd0740519f38071008b59efbd68ab3114587 .. .セッションIDの長さ: 0暗号スイートの長さ: 10暗号スイート( 5スイート)圧縮方法の長さ: 1圧縮方法( 1方法)拡張機能の長さ: 90 [その他の拡張機能は省略]拡張機能: application_layer_protocol_negotiation (長さ= 14 )タイプ: application_layer_protocol_negotiation ( 16 )長さ: 14 ALPN拡張機能の長さ: 12 ALPNプロトコルALPN文字列の長さ: 2 ALPN次のプロトコル: h2 ALPN文字列の長さ: 8 ALPN次のプロトコル: http / 1 . 1
Web サーバーから返される「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
参考文献
- ^ 「Dell BSAFE Micro Edition Suite 5.0 リリースアドバイザリ」。2022年10月18日閲覧。
- ^ “gnutls 3.2.0”。2016年1月31日時点のオリジナルよりアーカイブ。2015年1月26日閲覧。
- ^ 「MatrixSSL - ニュース」 2014年12月4日。2015年2月14日時点のオリジナルよりアーカイブ。2015年1月26日閲覧。
- ^ 「NSS 3.15.5 リリースノート」。Mozilla Developer Network。Mozilla。2015年1 月 26 日閲覧。
- ^ 「OpenSSL 1.0.2 リリースノート」。OpenSSLプロジェクト。2015 年 1 月 22 日。2014 年 9 月 4 日時点のオリジナルよりアーカイブ。2015年 1 月 26 日閲覧。
- ^ 「LibreSSL 2.1.3 リリース」 2015 年 1 月 22 日. 2015 年 1 月 26 日閲覧。
- ^ 「ダウンロードの概要 - PolarSSL」 2014-04-11。2015-02-09 にオリジナルからアーカイブ。2015-01-26に閲覧。
- ^ 「wolfSSL リリース変更ログ」 2015-10-26 . 2015-09-11閲覧。
- ^ 「Go 1.4 リリースノート」 2014-12-10 . 2017-11-28閲覧。
- ^ 「JEP 244: TLS アプリケーション層プロトコルネゴシエーション拡張」。2017 年 8 月 7 日。2018年 8 月 29 日に閲覧。
- ^ 「リリースノート: TLS アプリケーション層プロトコルネゴシエーション拡張」。2020 年 4 月 30 日。2020年 6 月 11 日閲覧。
- ^ 「TLS/SSL (Schannel SSP) の新機能」。2016 年 8 月 31 日。2020 年 3 月 30 日閲覧。
- ^ Langley, A. (2010 年 1 月 20 日). 「トランスポート層セキュリティ (TLS) 次期プロトコルネゴシエーション拡張」. IETF データトラッカー.
- ^ Langley, Adam. 「» NPN と ALPN」。2013 年4 月 2 日閲覧。
- ^ ラングレー、アダム。「False Start's Failure(2012年4月11日)」 。 2013年9月25日閲覧。
外部リンク
- ALPN プロトコル ID のレジストリは、TLS 拡張として IANA によって管理されています。
- draft-agl-tls-nextprotoneg-04 (NPN ドラフト) (最終更新: 2012 年 5 月)
- RFC 7301「トランスポート層セキュリティ (TLS) アプリケーション層プロトコルネゴシエーション拡張」
