mod_http2 脆弱性対応
パッチ配布元SVNからダウンロードする
CentOS7 apache http/2 対応
あぱーブログさんを参考にさせて頂きました。
mod_http2のRPMが見つからなかったのでソースから導入しました。
■ 開発ツール
ソースからコンパイル・ビルドする為にgccなどを導入しました。
# yum -y groupinstall base # yum -y groupinstall development # yum -y install zlib-devel # yum -y install libev-devel # yum -y install libuuid-devel lua-devel libxml2-devel # yum -y install python-devel
■ OpenSSL
wget https://www.openssl.org/source/openssl-1.0.2g.tar.gz # tar xvzf openssl-1.0.2g.tar.gz # cd openssl-1.0.2g/ # ./config --prefix=/usr/local/openssl-1.0.2g shared zlib # make # make install # echo /usr/local/openssl-1.0.2g/lib > /etc/ld.so.conf.d/openssl102g.conf # ldconfig
■ Nghttp2
wget https://github.com/nghttp2/nghttp2/releases/download/v1.9.2/nghttp2-1.9.2.tar.gz # tar zxvf nghttp2-1.9.2.tar.gz # cd nghttp2-1.9.2/ # autoconf -i # automake # autoconf # env OPENSSL_CFLAGS="-I/usr/local/openssl-1.0.2g/include" OPENSSL_LIBS="-L/usr/local/openssl-1.0.2g/lib -lssl -lcrypto" ./configure # make # make install # echo /usr/local/lib > /etc/ld.so.conf.d/local.conf # ldconfig
■ Apache 2.4系
wget http://ftp.jaist.ac.jp/pub/apache//httpd/httpd-2.4.20.tar.gz # tar zxvf httpd-2.4.20.tar.gz # cd httpd-2.4.20/ # ./configure --enable-http2 --enable-ssl --with-ssl=/usr/local/openssl-1.0.2g -enable-so --enable-mods-shared=all --with-mpm=prefork # make # make install
# vi /usr/local/apache2/conf/httpd.conf # 変更箇所のみ抜粋 LoadModule socache_shmcb_module modules/mod_socache_shmcb.so LoadModule ssl_module modules/mod_ssl.so LoadModule http2_module modules/mod_http2.so LoadModule rewrite_module modules/mod_rewrite.so LoadModule php5_module modules/libphp5.so # User apache Group apache # AddHandler cgi-script .cgi .pl # Include conf/ssl.conf # ServerTokens Prod ServerSignature Off
cp -p /etc/httpd/modules/libphp5.so /usr/local/apache2/modules/
# vi /usr/local/apache2/conf/ssl.conf # 変更箇所のみ抜粋 SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2 SSLCipherSuite !SSLv2:!SSLv3:kEECDH:kRSA:kEDH:kPSK:!aNULL:!eNULL:!3DES:!MD5:!EXP:!RC4:!SEED:!IDEA:!DES SSLHonorCipherOrder on <VirtualHost *:443> Protocols h2 http/1.1 ProtocolsHonorOrder On H2Direct on
Config確認
# /usr/local/apache2/bin/apachectl -t Syntax OK
起動確認
# systemctl stop httpd # systemctl disable httpd # /usr/local/apache2/bin/apachectl start
# nghttp http://localhost -v|grep HEADERS [ 0.001] send HEADERS frame <length=34, flags=0x25, stream_id=13> ; END_STREAM | END_HEADERS | PRIORITY [ 0.029] recv HEADERS frame <length=95, flags=0x04, stream_id=13> ; END_HEADERS # nghttp https://localhost -v|grep HEADERS [ 0.012] send HEADERS frame <length=37, flags=0x25, stream_id=13> ; END_STREAM | END_HEADERS | PRIORITY [ 0.128] recv HEADERS frame <length=169, flags=0x04, stream_id=13> ; END_HEADERS
「stream_id=13」となっていれば成功です。
ブラウザで確認
chromやFirefoxがHTTP/2に対応しています。
もちろんWindows 10 edgeも対応しています。
HTTP/1.1かHTTP/2どちらでアクセスしているか確認できるインジケーターのプラグインを入れると分かりやすいです。
Firefoxの例です。
稲妻マークがブルーならHTTP/2で通信できています。
グリーンの時はSPDY v3の様です。
chromの場合は「chrome://net-internals/#http2」で確認できます。
apacheのログにも「"GET /favicon.ico HTTP/2" 200」等と記録されていました。