togatttiのエンジニアメモ

過度な期待はしないでください.

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/Makefileconfigfiles = 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になれば、問題なく設定できている。

f:id:togattti1990:20161215191248p:plain