LibreSSL と H2O で HTTP/2
HTTP/2 を利用するためには TLS 通信ソフトウェアが必要となります。
この TLS 通信ソフトウェアとしても OpenSSL が使われていますが、LibreSSL を利用することもできます。
HTTP/2 での通信を、新しい HTTP サーバ H2O と LibreSSL の組み合わせで確認してみます。
はじめに
HTTP/2 と TLS の関係と制約
HTTP/2 と TLS通信の関係について確認しておきます。
HTTP/2 で通信を行うためには、Webサーバ側とブラウザ側の両方で HTTP/2 機能がサポートされている必要があります。また双方で実現されている HTTP/2 仕様が同じでなければなりません。
HTTP/2 自体は http と https の両方に対応するように仕様が策定されています。
どちらの場合も、HTTP/2 で通信するということを Webサーバ側とブラウザ側の間で取り決め(Negotiate)しなければなりません。
- http の場合は 'Upgrade: h2c' ヘッダを利用
- https の場合は TLS 拡張の ALPN を利用
ただし現在、主なブラウザは https の場合の ALPN による取り決め(Negotiate)の方しかサポートしていません。このため、ブラウザを相手にする Webサーバは、HTTP/2 対応するなら ALPN が必要ということになります。
ALPN は OpenSSL 1.0.2 でサポートされています。1.0.1 ではサポートされていません。LibreSSL は ALPN をサポートしています。
以上により、HTTP/2 サポートを OpenSSL を前提として提供する Webサーバは、OpenSSL なら 1.0.2 以降を使う必要があります。そしてその代替として LibreSSL も検討できるということになります。
HTTP/2 の TLS 通信ソフトウェアに LibreSSL を使うメリット
HTTP/2 通信で新しい暗号スイートの ChaCha20-Poly1305 を使えるのが LibreSSL を選択する場合のメリットでしょう。
OpenSSL では現在開発中の 1.1.0 で ChaCha20-Poly1305 がサポートされますが、現行の 1.0.2 と 1.0.1 ではサポートされていません。
https://www.openssl.org/news/openssl-1.1.0-notes.html
環境
今回の確認は CentOS7 (x86_64) で行いました。
HTTP/2 を H2O と LibreSSL で確認
H2O は HTTP/2 をサポートする新しい HTTP サーバです。
H2O は TLS 通信ソフトウェアとして OpenSSL と LibreSSL の両方が想定されています。
今回は最新の H2O を LibreSSL と組み合わせてビルドして、動作確認をしてみます。
H2Oのインストール
以下の場所から最新の version 2.0.0 をダウンロードします。
https://github.com/h2o/h2o/archive/v2.0.0.tar.gz
H2O version 2.0.0 には misc/ の下に libressl-2.2.7.tar.gz が同梱されています。
今回はこれを使ってビルドを行います。
(misc/libressl.mk 内の VERSION
を書き換えれば最新の LibreSSL も使えそうです。)
# tar xf v2.0.0.tar.gz
# cd h2o-2.0.0/
# cmake -DWITH_BUNDLED_SSL=on .
# make
# make install
以上で /usr/local/
配下に H2O がインストールされます。
H2O の設定と起動
H2O は /usr/local/share/doc/h2o/
以下にドキュメントやサンプルがあります。
今回はこのサンプルを利用しつつ、以下の設定ファイルを作って簡単に HTTP/2 での接続確認をしました。
hosts:
"test.com":
listen:
port: 80
listen:
port: 443
ssl:
certificate-file: /usr/local/share/doc/h2o/examples/h2o/server.crt
key-file: /usr/local/share/doc/h2o/examples/h2o/server.key
paths:
"/":
file.dir: /usr/local/share/doc/h2o/examples/doc_root
access-log: /var/log/h2o-access-log
error-log: /var/log/h2o-error-log
pid-file: /var/log/h2o-pid-file
設定は以上で完了です。
次に以下のコマンドで H2O を起動します。
# /usr/local/bin/h2o -m daemon -c /root/h2o.conf
動作確認
Chrome 51.0.2704.84 m (64-bit) で https にアクセスしてみると、"Welcome to H2O - an optimized HTTP server" の文字列を確認できました。
また以下のスクリーンショットのように、Protocol が h2
と表示され HTTP/2 で通信されていることが分かります。
openssl s_client
コマンドで -alpn h2
を指定することで ALPN が有効なことを確認することもできます。
# /usr/local/bin/openssl s_client -port 443 -cipher 'CHACHA20' -alpn h2
CONNECTED(00000003)
...
---
SSL handshake has read 1565 bytes and written 387 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-CHACHA20-POLY1305-OLD
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
ALPN protocol: h2
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-CHACHA20-POLY1305-OLD
...
"ALPN protocol" が h2
になっていることが分かります。
まとめ
HTTP/2 対応の Webサーバ構築のためには ALPN が必要です。
LibreSSL は ALPN をサポートしており、HTTP/2 を提供する Webサーバで TLS 通信ソフトウェアとして利用可能なことを確認しました。
LibreSSL を選択すると HTTP/2 で ChaCha20-Poly1305 が使えることも魅力です。
HTTP/2 対応では TLS 通信ソフトウェアとして OpenSSL に加えて LibreSSL も有力な候補として検討できるのではないでしょうか。
Author And Source
この問題について(LibreSSL と H2O で HTTP/2), 我々は、より多くの情報をここで見つけました https://qiita.com/kinichiro/items/0ee2417da7ab2a2ced4e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .