h2oでcipher-suiteを選択して利用する。

H2O におけるディレクトリトラバーサルの脆弱性というの対応をしたときのメモ^^;;

インストールしたときの手順も書き直してみる。
前回の手順はh2oで手軽にHTTP2.0を体験してみるに書かれているのでほとんど同じ。

OSはAmazon Linux AMI release 2015.09を利用しています。

前準備

yum group install “Development Tools”
yum install cmake openssl-devel

h2oのSourceをpull

cd /usr/local/src
git clone https://github.com/h2o/h2o.git

h2oをコンパイル

cd /usr/local/src
cmake .
make
make install

h2oの設定

h2oの設定は前回とそんなに違いはありません。
ただそのままだとSSL Labsのチェックでは「B」でした。
2015 10 1401

CipherでRC4を使っているのはあまりよろしくないということでRC4とかその他諸々を使わないような設定を入れ込みました。

error-log: /var/log/h2o/error.log
http2-reprioritize-blocking-assets: ON
max-connections: 1024
num-threads: 1

listen:
port: 443
ssl:
certificate-file: /home/ec2-user/ssl/example.txt
key-file: /home/ec2-user/ssl/key.txt
cipher-suite: AES128-SHA:ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:HIGH:MEDIUM:!aNULL:!MD5:!RC4

hosts:
“www.example.jp:443”:
listen:
port: 443
ssl:
certificate-file: /home/ec2-user/ssl/example.txt
key-file: /home/ec2-user/ssl/key.txt
cipher-suite: AES128-SHA:ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:HIGH:MEDIUM:!aNULL:!MD5:!RC4
paths:
/:
proxy.reverse.url: http://localhost/
access-log:
/var/log/h2o/ssl-zabbix-access.log

Cipherを変更した結果「A-」までなりました。
まぁとりあえずこれで運用してみます。

Forward Securityをどうするかは少し先延ばしする^^;;
h2o Forward Securityでググると前方秘匿性 (forward secrecy) をもつウェブサイトの正しい設定方法によると

解決策3. H2O を使う

これまで述べてきたように、これまでのウェブサーバの前方秘匿性のサポートはお粗末と言わざるをえません(他にも、マスターキーの強度が強力なセッションキーよりも弱いといった問題も存在します)。

そこで H2O ですよ!!!!

私たちが開発しているH2Oの最新バージョンは、これらの問題を全て解決しています。

h2o起動スクリプト

/etc/rc.d/init.d/h2oはh2oをリバースプロキシとして導入してみたをCopyしました。

#!/bin/bash
#chkconfig: 2345 85 15
#descpriction: h2o Web Server

# source function library
. /etc/rc.d/init.d/functions

RETVAL=0
SERVICE_NAME=`basename $0`

start() {
echo -n $”Starting : $SERVICE_NAME”
/usr/local/bin/h2o -c /home/ec2-user/ssl/h2o.conf &
RETVAL=$?
if [ $RETVAL == 0 ]; then
success
else
failure
fi
echo
}

stop() {
echo -n $”Stopping $SERVICE_NAME: ”
pkill h2o
RETVAL=$?
if [ $RETVAL == 0 ]; then
success
else
failure
fi
echo
}

case “$1″ in
start)
start
;;
stop)
stop
;;
*)
echo $”Usage: $0 {start|stop}”
exit 1
esac

exit $RETVAL