今回の目標
とりあえず、以下のことができれば目標達成ということにしたいとおもいます!
- SSL証明書の設定(脆弱性のあるSSLv2,v3は無効化、XPを見捨てたアルゴリズムの設定などをする)
- httpsなページはMT管理画面のみ、後はHTTP(平文)での対応
- SSL証明書は使いまわして、あるサイトのブログを別サーバーで管理するという前提
目標を自分で言ってるのですが、ハードル無駄に上げました。管理画面だけSSL必須で、戻るときは混在でも可とすればある程度早く終わってたものを...(時間的な問題と金銭的な問題があるため、割愛している部分が多々あります)
SSL証明書の取得
SSL証明書を取得します。今回、このサイトのSSL証明書を使いまわしたためこの部分は割愛します。(このサイトのSSL証明書のみサブドメイン対応済みのため)
私は国内のサイトが高いので海外のサイトで購入しましたが、最近では日本国内のサイトでも安くなっているのはいます。以下に挙げておきます。(大体ドメイン認証で〜2,000円程度)
また、個人で使われている方で、非営利であればStartComの証明書が使用することができます。
SSL対応する
SSL対応するときに、AWS版Movable Typeではnginxの設定ファイルが通常とは異なる場所にあります。いつもの場所(/etc/nginx/conf.d)に設定を記載したとしても直接のウェブサイトには反映されません。
そのため、AWS版Movable Typeで用いられている設定ファイルの保管場所から編集します。最初に設定ファイルが保管されているディレクトリに移動します。
# cd /data/conf/
これで設定ファイルが保存されているディレクトリに移動することができました。lsコマンドを実行すると以下のようになっていると思います。
# ls fastcgi_params mt-config.cgi mt-config.cgi.ja nginx.conf movabletype.conf mt-config.cgi.en_us nginx_common.conf
今回使用するファイルはnginxから始まるファイルです。nginx.confを見ていただくとわかりますが、大体の設定がnginx_common.confに記載されています。このファイルをコピーして、SSL通信用のファイルと通常のHTTP通信用のファイルに分けます。
# cp nginx_common.conf nginx_ssl_common.conf # cp nginx_common.conf nginx_common_original.conf
作成後、Viでこれらのファイルを編集していきます。
# vi nginx_common.conf server_name localhost; (割愛) location ^~ /mt/ { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://unix:/app/run/movabletype.sock; limit_req zone=one burst=100; proxy_read_timeout 300; return 301 https://$host$request_uri; }
# vi nginx_ssl_common.conf server_name localhost; (割愛) location / { ssi on;perl MTDynamicHandler::handler; root /data/file/static; limit_req zone=one burst=100; return 301 http://$host$request_uri;
}
location /mt-static { alias /app/movabletype/mt-static; }
location ~ /.ht { deny all; }
server_name localhost;に関してはウェブサイトのドメインを設定します。returnから始まっている場所に関しては追加します。
このままnginx.confを設定してコメントアウトして終了でも良いのですが、セキュリティ上の問題があるため変更します。
# vi nginx.conf (割愛) server { listen 80; include /data/conf/nginx_common.conf; }server { listen 443; include /data/conf/nginx_ssl_common.conf; ssl on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"; ssl_certificate /data/ssl/server.crt; ssl_certificate_key /data/ssl/server.key; }</pre><p>12,13行目をまるまるっとコピペします。サーバーの証明書の鍵ファイルは/data/ssl/ 以下にあるものとして記載しています。このことをすることによって、最近問題になっているPOODLE問題などはわりかし回避することが可能です。</p><p>最後に、nginxを再起動させると完了です。</p><pre class="brush: bash;"># service nginx restart</pre><p>今回使用したインスタンスを12月25日まで起動させておきます。上記に記載した設定とほぼ同じものを使っていますので、動作確認をしてもらえればと思います。MTの管理画面パスは/mt/demoです。</p><ul><li><a href="https://advent-2014.focusmark.jp/" target="_blank">2014 Advent Calender - focusmark.jp</a></li><li><a href="http://advent-2014.focusmark.jp/mt/demo" target="_blank">Movable Type - ログイン</a></li></ul>
参考サイト
SSLの設定や、情報などに関しては以下のサイトを参考にしております。
- Movable Type for AWS バージョン 6.0.3-1 リリースノート : Movable Type 6 ドキュメント
- nginx で http でのアクセスを https にリダイレクト - Qiita
- Nginx で location の判定方法と優先順位を調べる | レンタルサーバー・自宅サーバー設定・構築のヒント
- HTTPS サーバの設定(nginx Documents)
- 自堕落な技術者の日記 : 様々なサーバーのPOODLE SSLv3脆弱性(CVE-2014-3566)対策のまとめ(更新3) - livedoor Blog(ブログ)
- security - How do I patch/workaround SSLv3 POODLE vulnerability (CVE-2014-3566)? - Ask Ubuntu
- Security Labs: Configuring Apache, Nginx, and O... | Qualys Community