人生のヒント

私が経験したことが、誰かの人生のヒントになればと願い書きます。

8.本番環境を整える(SSL化)

スポンサーリンク

前回までに、HTTPでアクセスできるように環境が整いました。

今回は、HTTPSでアクセスできるようにNginxを設定します。

 

f:id:hinthint:20160822164906j:plain

HTTPSでサービスを提供することのメリットは、2つあると考えます。

一つは、ユーザへのコンテンツ インジェクション攻撃のリスクを減らすこと。

もう一つは、Google検索結果の順位引き上げへの効果への期待。

Google ウェブマスター向け公式ブログ: HTTPS ページが優先的にインデックスに登録されるようになりますより引用

検索結果での HTTPS URL の掲載順位を若干引き上げる取り組みにも着手しました。

 

私は、SSLボックス 「CoreSSL」というSSL証明書を利用しています。

CoreSSLは年額1,069円と安価です。

同じSSLボックスの「ジオトラスト クイックSSLプレミアム」だと年額16,200円です。

 

二つの製品の違いは、認証局が違うことと、利用端末のカバー率です。

「ジオトラスト クイックSSLプレミアム」は、昔からある携帯電話端末でもアクセスできたりしますが、「CoreSSL」にアクセスできる携帯電話端末の数は少なくなります。

携帯電話というのは、いわゆるガラケーというやつなので、ガラケー対応サイトで無ければこのメリットは意味ありません。

認証局の信頼性という意味でジオトラストを選択するのは良いと思いますが、今回は個人運営サイトで個人情報やお金のやり取りをしないサイトなので、信頼性とかを気にしないようにしました。

どういったサイトを作るかで、SSL証明書を効果的に選択するのが良いでしょう。

 

また、無料のSSL証明書「Let’s Encrypt」というのがあります。

「CoreSSL」との大きな違いは、有効期間です。「CoreSSL」は1~3年と長めの期間ですが、「Let’s Encrypt」は3か月と短めです。

メンテナンスをきちんと出来る方は「Let’s Encrypt」を選択しても良いと思います。

 

このブログでは、私が利用している「CoreSSL」での設定方法を書いていきたいと思います。

※証明書のインストール手順について、公式HPに出されていません。よって、保証された手順で無いことをあらかじめご了承ください。

 

下記ブログを参考にさせていただきました。

SSLボックスでCoreSSL(格安SSL)証明書 - zuntan02のはてなブログ

 

 

1.証明書発行の申込

(1)承認用メールアドレスを用意しておく。

証明書発行の際には、登録するドメインの管理者本人であると認証するために、メールによる承認手続きが必要ですので、予め確認が可能なメールアドレスをご準備ください。
承認用メールアドレスは、下記のいずれかに沿うものである必要があります。

  • コモンネームで使用されているドメインのWHOIS情報(登録者情報)に登録されているメールアドレス
  • コモンネームで使用されているドメインを用いたメールアドレス(admin@ドメイン名など)

 

(2) SSLボックス でアカウント登録をして、ログインする。

 

(3)SSLの新規取得を行う

 ①SSLボックス管理をクリック

 ②新規取得をクリック

 ③その他のサーバーで利用するをクリック(ConoHa利用のため)

f:id:hinthint:20160822104508p:plain

 

(4)購入するSSL種別を選択して、料金計算ボタンをクリックします。

 プリペイドを追加購入するをクリックして、必要な金額のプリペイドを購入します。

ブログ執筆時点の「CoreSSL」1年の金額1,069円。

f:id:hinthint:20160822104701p:plain

 

(5)新規お申し込み後の画面で「引き続き取得申請を行う」をクリックします。

 

2.CSR発行

(1)rootでサーバにログインして、下記コマンドを実行します。

(例)サーバ名:www.example.com、パスフレーズを使用しない

# cd /root

# openssl genrsa -out www.example.com.2016.key 2048
# chmod 400 www.example.com.2016.key
# openssl req -new -key www.example.com.2016.key -out www.example.com.2016.csr -sha256

入力を求められるため、適切に入力します。

以下の3項目については、何も入力せず進んでください。

  • Email Address
  • A challenge password
  • An optional company name

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Some-State
Locality Name (eg, city) :city
Organization Name (eg, company) [Internet Widgits Pty Ltd]:company
Organizational Unit Name (eg, section)
:section
Common Name (e.g. server FQDN or YOUR name) :www.example.com
Email Address
:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password :
An optional company name
:

 

以下コマンドを入力します。

# chmod 400  www.example.com.2016.csr

# openssl req -in  www.example.com.2016.csr -text

 こんな感じで出力されることを確認し、この部分をコピーしておきます。

-----BEGIN CERTIFICATE REQUEST-----
(暗号化されたコード)
-----END CERTIFICATE REQUEST-----

 

(2)新規取得画面で、以下を入力し、次へ進むボタンをクリックします。

・コモンネーム:www.example.com(例:サーバ名を入力してください)

・署名アルゴリズム:「SHA-2(SHA256)」

・CSR入力欄:(1)でコピーした文字をペーストします。

http://www.sslbox.jp/images/contents/support/man/new_application_04.png

 

(3)コモンネームとCSRの情報に間違いが無いかをご確認ください。
間違いが無ければ、次に「申請登録情報」を入力します。

フォームに沿って、以下の項目を入力し、「次へ進む」をクリックします。

  • 承認用メールアドレス
  • 組織名
  • 役職
  • 郵便番号
  • 国コード
  • 都道府県
  • 市区町村
  • 住所
  • 電話番号
  • FAX番号
  • メールアドレス

http://www.sslbox.jp/images/contents/support/man/new_application_05.png

入力した情報に間違いが無いかをご確認いただき、問題が無ければ「次へ進む(申請を確定する)」をクリックします。

オンラインでの審査の後、承認用メールアドレス宛に承認確認メールが送付されます。

私が行った時は、数分くらいでメールが来ました。

 

3.証明書インストール

Nginxには、中間証明書を設定するパスは無いため、サーバ証明書と中間証明書を結合します。

(1)管理画面からサーバ証明書と中間証明書をパソコン上に保管します。

サーバ証明書のファイル名を「www.example.com.2016.crt」、中間証明書のファイル名を「inter.crt」としてサーバ上(/root)に保管します。

以下コマンドを実行します。

# cd /root

# cat www.example.com.2016.crt inter.crt > www.example.com.2016.pem

# chmod 400 www.example.com.2016.pem

# mv  www.example.com.2016.pem /etc/nginx/conf.d/

# mv www.example.com.2016.key /etc/nginx/conf.d/

 

(2)Nginxの設定ファイルを変更します。

HTTPへのアクセスをさせないために、1から書き直します。

# vi /etc/nginx/sites-available/default

こんな感じの記述をします。

 upstream app {
    # Path to Unicorn SOCK file, as defined previously
    server unix:/tmp/unicorn.mrchildren.sock fail_timeout=0;
}

server {

        listen 443;
        server_name www.example.com;
        ssl on;
        ssl_certificate /etc/nginx/conf.d/www.example.com.2016.pem;
        ssl_certificate_key     /etc/nginx/conf.d/www.example.com.2016.key;

        root /home/rails/work/foo/public/;
        index index.html index.htm;

        # Make site accessible from http://localhost/
        try_files $uri/index.html $uri @app;

        location @app {

          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-FORWARDED_PROTO https;
          proxy_set_header Host $http_host;
          proxy_redirect off;
          proxy_pass http://app;
        }

        location ~ .*\.(jpg|gif|png|css|js|ico|woff) {
           expires 10d;
        }

        error_page 500 502 503 504 /500.html;
        #client_max_body_size 4G;
        keepalive_timeout 10;
}

 

以下コマンドを実行して、設定を反映させます。

# /etc/init.d/nginx restart

Webブラウザで「https://www.example.com」にアクセスでき、サーバ証明書を確認できれば問題ありません。