最終更新日:2016年5月7日
Apache で SSL/TLS 証明書を使用したサイトの評価を A+ にする
下記記事の内容により、Let’s Encrypt の SSL/TLS 証明書の導入・設定が済みました。
ですが、これで設定が全て完了したわけではなく、SSL/TLS 証明書の Apache の設定をしないと、POODLEなどの脆弱性を含んだ状態でサイトを公開することになってしまいます。
SSL/TLS 証明書の Web サーバーの設定のレベルは、SSL Server Test (Powered by Qualys SSL Labs) で検証することができます。
この Qualys SSL Labs というサイトは有名なようですね。グローバルサインの SSL Server Test も結局、Qualys SSL Labs を使用しているようですし。
では、さくら VPS の CentOS 6 のデフォルト設定で HTTPS 化されたサイトを検証してみましょう。
なんと評価は C でした。
よく見ると POODLE とか書いてあるし、結構問題がありそうです。
では、A 評価を目指して設定を変更していきます。
Apache のデフォルトの ssl.conf の設定は以下のようになります。
SSLProtocol all -SSLv2 SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
POOODLE の脆弱性は SSL 3 にあるので、SSL 3 を無効にします。
SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
Apache を再起動して、再度検証します。
今度は B 評価になりました。
次は、RC4 ですね。RC4 は現在では危険な暗号スイートのようなので、これを無効にします。
SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES:!RC4
Apache を再起動して、再度検証します。
しかし、何度試してもうまくいきません。
RC4 を受け付ける設定になっているという警告が出てしまいます。
いろいろ試していてようやく分かったのですが、SSLCipherSuite が VirtualHost ディレクティブ内にあるとダメなようです。ですので、上記の内容を ssl.conf の末尾にコピーアンドペーストして、元の記述はコメントアウトします。
<VirtualHost> #SSLProtocol all -SSLv2 -SSLv3 #SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES:!RC4 </VirtualHost> SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES:!RC4
Apache を再起動後に再検証します。
評価が A- まで来ましたね。
では、最後の Logjam と呼ばれる Diffie-hellman(DH)の鍵交換の脆弱性の対応をします。
DH を無効化して、サーバー側の暗号スイートを優先させるようにします。ssl.conf の末尾に記述することに注意してください。Apache を再起動後に再検証します。
SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES:!RC4:!DH SSLHonorCipherOrder On

A 評価きましたね!
A 評価を得たのですが HTTPS 化したサイトなので、HSTS(HTTP Strict Transport Security) の設定もしてしまいましょう。
HSTS は、HTTPS の通信をブラウザに強制するセキュリティ機能です。最初の1回だけは HTTP で接続する場合がありますが、その後は HTTPS で通信するのでデータの安全性が高まります。
HSTS の設定は、httpd.conf で行っても構わないのですが、ここでは ssl.conf で行ってみます。
ssl.conf の最終行に以下の記述を追加し、Apache を再起動後に再検証します
Header set Strict-Transport-Security "max-age=315360000;"

おっと、ここでまさかの A+ 評価!!本人もびっくり!w
A+ 評価が出たのは驚きですが、何時間も格闘した甲斐があったというものです。
まとめると、ssl.conf の末尾(VirtualHost ディレクティブ外)に以下の記述をして、Apache を再起動することで HTTPS 通信の評価が A+ になります。
SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES:!RC4:!DH SSLHonorCipherOrder On Header set Strict-Transport-Security "max-age=315360000;"
また、使用できない環境も、Windows XP + IE6 位なので後方互換性も十分ですね。
なお、この情報は 2016年5月6日 時点のものなので、実際に利用する際には最新の情報も確認してください。
参考サイト
- 安全なWebサイトの構築方法(SSL編) ~Qualys SSL LABSでA評価を目指して~ - SHANON Engineer's Blog
- Generate Mozilla Security Recommended Web Server Configuration Files
スポンサーリンク
カテゴリー:ブログ
コメントを残す