Hatena::ブログ(Diary)

あすのかぜ Twitter

2013-02-07

TLS上でのプロトコルネゴシエーションの仕組み、NPNとALPN

(この記事は古いため、HTTP2.0と表記していますが、正しくはHTTP/2です)

(HTTP ConnectメソッドのALPNヘッダは「ALPN HTTP Headerとは」)


TLS-NPN(Next Protocol Negotiation)

SPDYはHTTPSと同一ポートで接続を受け付けるため、SPDYの通信を開始する前にどちらのプロトコルで通信するか決める必要がある。その方法としてTLS-NPNを用いる。これは、SSLハンドシェイク時に使用するプロトコルのネゴシエーションも同時に行なってしまう方法である。TLS-NPNはGoogleによって仕様が策定されている(仕様URL)。

f:id:ASnoKaze:20130207233639p:image

TLS-ALPN(Application Layer Protocol Negotiation)

HTTP2.0においても、このSSLハンドシェイク時にネゴシエーションをすることが検討されている。もともとNPNを使う予定もあったが、現在はTLS-ALPNとしてTLS WGで議論・仕様策定されている(仕様URL)。

f:id:ASnoKaze:20130208001012p:image

Next Protocol Negotiationとの違いとしては

  • 使用出来るプロトコルのリストをクライアントが提示しサーバが選択する(プロトコルとしてサーバに決定権がある方が好ましい)
  • 選択できるプロトコルがリストになかった場合はhandshake alertを通知して切断する
  • Selected Protocolが暗号化されない
  • プロトコルが決定してから、クライアント証明書を提出できる

などがあげられる。


追記

ALPNもRFC化されていした

https://tools.ietf.org/html/rfc7301

OpenSSLがalpnに対応しました (openssl 1.0.2

http://d.hatena.ne.jp/ASnoKaze/20140327/1395938540

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/ASnoKaze/20130207/1360249692