FreeBSD10のHTTP/2設定手順
FreeBSD10で、HTTP/2の検証をしようと思ったので、設定手順を残す。
Webサーバは、Apacheを使う。
環境
- OS
- FreeBSD10.3
必要なソフトのインストール
クリーンインストール後からの作業を想定しているので、
すでに稼動しているサーバとは手順が異なるかもしれない。
pkgツール
# pkg
perl、pcre
# pkg install perl5.22 # ln -s /usr/local/bin/perl5.22.3 /usr/local/bin/perl # pkg install pcre
openssl
クライアントとサーバ間で、ALPNを使用するために、OpenSSLの1.0.2以上を入れる。
# mkdir /usr/local/src # fetch --no-verify-peer https://www.openssl.org/source/openssl-1.0.2j.tar.gz # tar xvfz openssl-1.0.2j # cd /usr/local/src/openssl-1.0.2j # ./config -fPIC —shared # make && make install
共有ライブラリのパスを追加する。
# ldconfig -m /usr/local/ssl/lib
nghttp2
# fetch --no-verify-peer https://github.com/nghttp2/nghttp2/releases/download/v1.17.0/nghttp2-1.17.0.tar.gz # tar xvfz nghttp2-1.17.0.tar.gz # cd /usr/local/src/nghttp2-1.17.0
contrib/Makefileのconfigfiles = nghttpx-init nghttpx.service nghttpx-upstart.conf
をコメントアウトして、ビルドする。
# ./configure # make && make install
apr、apr-util
apr
# fetch --no-verify-peer http://ftp.meisei-u.ac.jp/mirror/apache/dist//apr/apr-1.5.2.tar.gz # tar xvfz apr-1.5.2.tar.gz # cd /usr/local/src/apr-1.5.2 # ./configure # make && make install
apr-util
# fetch --no-verify-peer http://ftp.meisei-u.ac.jp/mirror/apache/dist//apr/apr-util-1.5.4.tar.gz # tar xvfz apr-util-1.5.4.tar.gz # cd /usr/local/src/apr-util-1.5.4 # ./configure --with-apr=/usr/local/apr # make && make install
Apache
# fetch --no-verify-peer http://ftp.yz.yamagata-u.ac.jp/pub/network/apache//httpd/httpd-2.4.23.tar.gz # tar xvfz # cd /usr/local/src/httpd-2.4.23 # ./configure --prefix=/usr/local/etc/apache24 --with-included-apr=/usr/local --enable-ssl --with-ssl=/usr/local/ssl --with-nghttp2=/usr/local --enable-http2 --enable-so # make && make install
VirtualHost設定
httpd.confを修正して、443をListen、mod_sslとmod_http2を有効にする。
また、バーチャルホストの設定ファイルは、/usr/local/etc/apache24/conf/virtual_host/以下に置くようにする。
@@ -50,6 +50,7 @@ # #Listen 12.34.56.78:80 Listen 80 +Listen 443 # # Dynamic Shared Object (DSO) Support @@ -128,8 +129,8 @@ #LoadModule session_cookie_module modules/mod_session_cookie.so #LoadModule session_dbd_module modules/mod_session_dbd.so #LoadModule slotmem_shm_module modules/mod_slotmem_shm.so -#LoadModule ssl_module modules/mod_ssl.so -#LoadModule http2_module modules/mod_http2.so +LoadModule ssl_module modules/mod_ssl.so +LoadModule http2_module modules/mod_http2.so #LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so #LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so #LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so @@ -490,5 +491,8 @@ <IfModule ssl_module> SSLRandomSeed startup builtin SSLRandomSeed connect builtin +SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK +SSLProtocol All -SSLv2 -SSLv3 </IfModule> +Include /usr/local/etc/apache24/conf/virtual_host/*.conf
バーチャルホスト側は、こんな感じにする。
# cat /usr/local/etc/apache24/conf/virtual_host/togattti.example.com.conf <VirtualHost 192.168.0.1:443> ServerName togattti.example.com ErrorLog logs/ssl_error_log SSLEngine on SSLCertificateFile "/usr/local/etc/ssl/my.crt" SSLCertificateKeyFile "/usr/local/etc/ssl/my.key" Protocols h2 http/1.1 ProtocolsHonorOrder On DocumentRoot "/usr/local/etc/apache24/htdocs" </VirtualHost>
SSL証明書を作る。
# mkdir /usr/local/etc/ssl # openssl genrsa 2048 > /usr/local/etc/ssl/my.key # openssl req -new -key my.key > /usr/local/etc/ssl/my.crt # openssl x509 -days 3650 -req -signkey /usr/local/etc/ssl/my.key < /usr/local/etc/ssl/my.csr > /usr/local/etc/ssl/my.crt
Apacheを再起動する。
/usr/local/etc/apache24/bin/httpd -k restart
検証
Chromeで、開いて、デベロッパーツールのProtocol欄がh2になれば、問題なく設定できている。