こんにちは!インフラエンジニアの射場です。
趣味やお仕事でWebサイトを運用されている方はいらっしゃいますか?
そのWebサイトはSSL証明書を使っていますか?
SSL証明書を使っていると答えたアナタ!
下記のリンクにあなたの管理するWebサイトのURLを
ぺっちょりと貼り付け、スキャンを実行してみてください。
https://sslcheck.globalsign.com/ja/
いかがでしたか?
ランクはAでしたか?Bでしたか?それともEやF?
ちなみに、私もほそぼそとWebサイトを運用しており、つい先日SSL証明書を入れました。
忙しさを言い訳に、初期設定のまま放置していました。
そんなだらしない私のWebサイトの評価はご覧のとおり。
※恥ずかしいのでURLは伏せています///
これはあかん
ということで、いっちょ本気を出してみましたので、その設定内容を晒したいと思います!
Webサーバーについて
今回設定を施したWebサーバーは
- CentOS6 32bit
- Apache-2.2.29(ソースからビルド)
- mod_ssl
な感じのWebサーバーです。
変更前の設定
冒頭で申し上げた通り、SSLProtocol、CipherSuiteが初期のまんまです。
1 2 3 4 5 6 7 8 9 10 |
<VirtualHost *:443> SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 SSLCertificateFile /usr/local/apache2/cert/cert.pem SSLCertificateKeyFile /usr/local/apache2/cert/keynp.pem SSLCertificateChainFile /usr/local/apache2/cert/chain.pem <省略> </VirtualHost> |
本気出した結果
SSLの設定を調整するにあたり、以下の点を意識して設定を行いました。
- WinXPのIE6やJava6などの古いクライアントはサポートしない
- SSL Compressionは無効にする
- SSLv2、SSLv3は使用しない
- サーバが提供する暗号化スイートを優先的に使用するようにする
- 使用する暗号化スイートには現在安全性が高いとされている暗号化スイートを指定する
- 古くて危ない暗号化スイートは徹底的にはぶく
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
SSLCompression off <VirtualHost *:443> SSLEngine on SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder On SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!EXP:!LOW:!aNULL:!eNULL:!ADH:!DSS:!MD5:!PSK:!SRP:!RC4:!3DES Header add Strict-Transport-Security "max-age=15768000" SSLCertificateFile /usr/local/apache2/cert/cert.pem SSLCertificateKeyFile /usr/local/apache2/cert/keynp.pem SSLCertificateChainFile /usr/local/apache2/cert/chain.pem <省略> </VirtualHost> |
スコアも劇的に改善!
設定項目の簡単な説明やポイントを説明します。
SSLCompression
ブラウザとの HTTPS 接続に SSL/TLS データ圧縮を使っている場合に
中間者攻撃者が平文の HTTP ヘッダを取得する可能性があるので、データ圧縮をしないよう設定します。
VirtualHostディレクティブの外に書かないと怒られてしまうので、ご注意を!
残念ながらSSLCompression off の設定ができるのは 2.2.24、2.4.3 以降のApacheとなります。。
SSLProtocol
SSLv2、SSLv3は深刻な脆弱性を抱えたものなので、使わないようにします。
SSLCipherSuite
TLS1.0以降の暗号化方式に対応した暗号化スイートを使うようにします。
脆弱性の発見された危険な暗号化スイートは明示的に禁止します。
SSLHonorCipherOrder
SSLHonorCipherOrderを有効にすることで、ネゴシエーションの際に
暗号の選択をサーバ側で決定するようになります。
この設定を有効にすることで、SSLダウングレード攻撃を防ぎます。
Header add Strict-Transport-Security(HSTS)
HSTS はサーバーから “Strict-Transport-Security” というヘッダを返すことで、
以後そのブラウザで 同じURLを入力すると HTTP ではなく HTTPS で暗号化した通信を行うようにする機能です。
これにより、常時HTTPS通信をするように設定します。
最後に
ここまでご覧いただきありがとうございます!
この記事で紹介させていただいた設定例は私が個人で管理しているサーバーの設定例であり、
当社が提供しているサービスの設定とは異なりますのでご了承ください。
ここでの設定はApache2.2系、2.4系であればほぼそのまま流用しても問題無いです。
SSLCipherSuite に限ればNginxでも設定を流用できます。
最近巷を騒がせたPOODLE脆弱性や、FREAK脆弱性、まだ知らない脆弱性から身を守るため、
いつもセキュアな状態に保てるよう手段を講じていかねばと改めて思いました。