備忘録 サーバー

TLS-NPNでHTTP/2.0は使えなくなった

2017年6月19日

前に確認したときはHTTP2で通信ができていたのに今見るとHTTP1.1での通信になっていました。

なんでHTTP/1.1になってるんだ…?と調べてみたところどうやらChromeのバージョンによって制御が変わったみたいです。

ChromeがTLS-NPN拡張のサポートを終了していた

HTTP/2.0の前駆者であったSPDYのサポート終了

2015年の5月にHTTP/2.0がRFC7540にて公開され、それまで変わりとして使用していたSPDYがサポートが2016年5月15日に終了なりました。

SPDYはGoogleが独自に提唱したプロトコルでドラフト開始したのが2009年とのこと。
SPDY自身も何度かバージョンアップを繰り返し、HTTP/2.0仕様のベースとして採用し正式公開されたのでもうSPDYはいらないよね!というGoogleの判断なのでしょう。

SPDYは過去にCRIMEという脆弱性もありましたしね。今となっては懐かしい…

SPDYはHTTP2がRFC化されたらなくなるという噂は聞いていました。

TLS-ALPN方式に一本化

今までSPDY・HTTP/2.0として使うにはSSLハンドシェイクと同時にSPDY・HTTP/2.0を利用することをサーバに伝えないとSPDY・HTTP/2.0で開始してくれません。その為、TLS拡張をする必要があり、

  • NPN(Next Protocol Negotiation)
    • サーバープロトコルを提示し、クライアント側がどのプロトコルを使用するか決定する方法
    • 主にSPDYで使用
  • ALPN(Apprication Layer Protocol Negtiation)
    • クライアント側がプロトコルを提示し、サーバ側がどのプロトコルを使用するか決定する方法
    • 主にHTTP/2.0で使用

の2種類だったのですが、HTTP/2.0はALPN方式が使用されるようになったことからChromeはNPN方式を削除したようです。

TLS-ALPNではOpenSSLのバージョンアップが必要

さて、そのままALPNを使えばいいのですが、ALPNがRFC化したのは2014年7月と新しい技術なんです。

OpenSSL1.0.2以上でALPN対応しています。

CentOS7で標準搭載されているOpenSSLはOpenSSL 1.0.1なので、そのまま使うとHTTP/2.0は使えません。

現状HTTP/2.0を行いたい場合はALPNに対応したOpenSSLが必要なので、最新のOpenSSLを取得してWebサーバに組み込みしないとなぁ。。。

-備忘録, サーバー
-, , ,