1. はじめに
以前、自己署名証明書(いわゆるオレオレ証明書)のことを書きましたが、今回は、認証局の発行した、ちゃんとした SSLサーバ証明書を取得してみることにします。
そもそも SSLサーバ証明書には、信頼性の高い順に、「EV SSL証明書」「企業認証(OV)証明書」「ドメイン認証(DV)証明書」という種類のものがあるのですが、今回は、個人サイト向けにドメイン認証を目的としたSSLサーバ証明書を取得します。
参考
できるだけ安いものを探していたのですが、
で紹介されていた「GoGetSSL」という海外のサイトがよさそうだったので、そこで探すことにしました。
www.gogetssl.com
Domain Validation(ドメイン認証)の SSL証明書のリストを見てみると、
製品 | 価格(1年契約) | 価格(3年契約) |
---|---|---|
Comodo Positive SSL | $ 8.95 /年 | $ 3.65 /年 |
RapidSSL Standard | $ 8.85 /年 | $ 7.38 /年 |
の二つが候補に挙がったのですが(価格は2015年7月現時点)、契約期間は1年分だけでよかったので、今回は「RapidSSL Standard」を購入することにしました。
以下、
- お名前.com でドメイン取得
- GoGetSSL で「RapidSSL Standard」取得
- Amazon EC2インスタンス起動
- お名前.com で Aレコード設定
- Amazon EC2インスタンスで SSLサーバ証明書の動作確認
をするための手順です。
2. お名前.com でドメイン取得
まずは、例えば、お名前.com などのレジストラでドメインを取得します。
2.1. お名前.com でドメインを取得
ここでは、Whois情報公開代行サービスを付けておきましたが、CSR申請時に一旦解除することになります。
SSLサーバー証明書など一部サービスにおいて、本人確認の手段としてドメインのWhois情報を利用する場合は、いったん「Whois情報公開代行」を解除し、承認作業が完了したのち、再度「Whois情報公開代行」を設定してください。
この後、GMO Internet からメールアドレス有効性認証のための確認メールが届くので、メール中のリンクをクリックして認証を完了させます。
2.2. Whois情報公開代行サービスを解除
ドメイン認証の申請のために、Whois情報公開代行サービスを解除しておきます。
ドメインNavi にログインし、「ドメイン設定」->「ドメインWhois情報変更」から、対象のドメイン名をクリックして「登録者情報の変更」にチェックを入れると登録者情報が表示されるので、情報が正しいか確認しておきます。
次に、「Navi TOP」のドメイン一覧から、対象のドメインの「Whois情報公開代行」の「解除する」をクリックして、処理を完了させます。
Whois情報公開代行サービスを解除したら、Whois検索で、自分で取得したドメインの Whois情報を確認しておきます。Registrant(登録者名)に自分の登録者情報が表示されていれば OKです。
2.3. メール転送設定
最後に、ドメイン認証申請の際に送信される確認メールが受信できるように、特定のメールアドレスの転送設定をしておきます。
ドメインNavi の「オプション設定」->「メール転送設定」から、対象のドメインの「設定する」をクリックします。
転送元メールアドレスのローカル部に「admin」、転送先メールアドレスに実際に受け取れるメールアドレスを入力して「新規追加」をクリックし、「確認画面へ進む」をクリック。
設定が完了したら、念のため、転送元メールアドレス宛に送信したメールが受信できるかチェックしておきます。
3. GoGetSSL で RapidSSL Standard 取得
3.1. RapidSSL Standard を購入
GoGetSSL のトップページから、「Domain Validation」の「View SSL List」をクリック。
「RapidSSL Standard」の「Details」を選択します。
「BUY SSL」をクリック。
「Business Company or Private/Individual」に「Private customer (Individual)」を選択して、「Next Step」をクリック。
「Create new account」をクリックして、新規アカウントを作成します。
アカウント情報(CSRに使われる情報ではない)を入力して、次へ。
決済方法を選択して、「Complete Order」をクリックし、決済を完了させます。
ちなみに現時点で、8.85ドル=1,136円 でした。
支払いが完了したら、サイトに再度ログインします。
3.2. Online CSR Generator で CSR を作成
Certificate Signing Request(CSR)を作成します。
ここでは OpenSSL を利用せず、GoGetSSL が提供しているオンラインのツール(Online CSR Generator)で作成します。
GoGetSSL のダッシュボードから、「Online Tools」->「Online CSR Generator」と選択。
CSR の申請内容は以下の通りです。
ちなみに、個人の場合と法人の場合とで内容が少し異なっています。(なお、このツールでは「OU:部署名」が省略不可のため、適当な値を入れています。)
入力項目 | 個人の場合の入力例 | 法人の場合の入力例 |
---|---|---|
Common Name(CN:コモンネーム) | www.akiyoko.com(サイトのFQDN) | 同じ |
Organization(O:組織名) | Taro Yamada(英語氏名) | ABC Company Co.,Ltd.(正式英語組織名) |
Department(OU:部署名) | OU1 ( *1 ) | System Solution Department |
City(L:市区町村名) | Xxx-shi / Xxx-ku | 同じ |
State(S/ST:都道府県名) | Tokyo | 同じ |
Country(C:国名) | JP | 同じ |
admin@{ドメイン名} | 同じ |
ちなみに、OpenSSL を使用する場合は以下を参考に。
Apache + OpenSSL CSR生成手順 (新規)ジオトラスト
「Generate CSR」をクリックすると、作成された CSR と秘密鍵が画面に表示されるので、両方ともコピペして保存しておきます。
3.3. CSR を申請
3.2.で作成した CSR を、GoGetSSL から申請します。
GoGetSSL のダッシュボードから、「Manage SSL certificates」をクリックし、リストから CSRを申請したい証明書の「Generate」をクリックします。
STEP 1 - CSR Configuration
Order Type | New Order |
Web Server Software | Nginx |
Paste your CSR | 2.4.で生成した CSRをまるごとコピペ |
Please select signature algorithm | SHA2 |
上記を入力後、「Validate CSR」をクリック。
STEP 2 - Select validation method
2.3.で設定したメールアドレスを選択して、「Next Step」をクリックします。
管理者情報(Administrative Contact)を入力し、「agree to the Terms and Conditions」をチェックして、「Complete Generation」をクリック。
この時点では、証明書のステータスは「Processing」になっています。
この後数分で、「RapidSSL Certificate Request Confirmation」というタイトルのメールが、STEP2 で設定したメールアドレス宛に送られてきます。
メール中の上記のリンクにアクセスし、「承認します」をクリックします。
ステータスが「Active」になりました。
3.4. SSL証明書・中間CA証明書をダウンロード
My SSL Certificates から、対象の証明書の「View」ボタンをクリック。
SSL証明書は「Download SSL」、中間CA証明書は「CA Bundle」のリンクからダウンロードすることができます。ファイル名はそれぞれ、
- www_akiyoko_com.crt
- www_akiyoko_com.ca-bundle
となります。
4. Amazon EC2インスタンス起動
以下の設定で、Amazon EC2インスタンスを起動します。
Region | Tokyo |
VPC | default |
Subnet | No preference |
SecurityGroup | 22, 80, 443番を許可(MyIPのみ) |
AMI | Ubuntu Server 14.04 LTS (HVM) |
Elastic IP | 52.68.xxx.xxx |
5. お名前.com で Aレコード設定
5.1. ドメインNavi で Aレコードを設定
ドメインNavi にログインし、「ドメイン設定」->「DNS関連機能の設定」から、対象ドメインを選択して、「次へ進む」をクリック。
「DNSレコード設定を利用する」の「設定する」ボタンをクリック。
サブドメインを「www」に設定したホスト名の Aレコードに、4.で起動したインスタンスの Elastic IP を設定して、「追加」ボタンをクリック。
「確認画面へ進む」ボタンをクリックして、設定を完了させます。
5.2. メール転送設定を解除
ここでついでに、ドメイン認証の申請のために、一旦解除していた Whois情報公開代行サービスを復活させます。
「Navi TOP」のドメイン一覧から、対象のドメインの「Whois情報公開代行」の「申し込む」をクリックして、Whois情報公開代行サービスを設定します。
再設定は無料で行えるようです。
5.3. メール転送設定を解除
ついでのついでに、「オプション設定」->「メール転送設定」から、メール転送設定を解除しておきます。
6. Amazon EC2インスタンスで動作確認
6.1. 非SSLバージョンで動作確認
まずは、非SSLバージョンで動作確認をしておきます。
4.で起動したインスタンス上で、Django + Gunicorn + Nginx でアプリケーションを構築し、非SSLでアクセスできるように設定します。
以降、EC2インスタンスに乗り込んで操作します。
$ ssh -i ~/Downloads/T1-key.pem ubuntu@52.68.xxx.xxx
Django をインストール、アプリケーションを作成します。
### pip をインストール $ sudo apt-get update $ sudo apt-get install -y python-pip python-dev ### virtualenv をインストール $ sudo pip install virtualenv ### Django をインストールし、/opt/webapps配下に Djangoプロジェクトを作成 $ sudo mkdir -p /opt/webapps $ sudo chown `whoami`. /opt/webapps $ cd /opt/webapps/ $ virtualenv venv $ source venv/bin/activate (venv)$ pip install django (venv)$ pip list | grep Django Django (1.8.3) ### Djangoプロジェクトを作成 (venv)$ django-admin.py startproject myproject (venv)$ cd myproject/ (venv)$ python manage.py migrate (venv)$ python manage.py createsuperuser (admin/admin@example.com/adminpass) ### settings.py に最後の一行を加える (venv)$ vi myproject/settings.py --- ・ ・ STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static/') --- (venv)$ python manage.py collectstatic
Gunicorn をインストールして起動します。
(venv)$ pip install gunicorn ### デーモンとして実行 (venv)$ gunicorn --workers 3 --bind unix:/tmp/myproject.sock --daemon myproject.wsgi:application
Nginx をインストールして起動します。
$ sudo apt-get install -y nginx $ nginx -v nginx version: nginx/1.4.6 (Ubuntu)
### デフォルトの設定ファイルを書き換え $ sudo vi /etc/nginx/sites-available/default --- upstream myproject_backend { server unix:/tmp/myproject.sock fail_timeout=0; } server { listen 80; server_name www.akiyoko.com; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /opt/webapps/myproject; } location / { proxy_set_header Host $http_host; 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 $scheme; proxy_pass http://myproject_backend; } } --- $ sudo service nginx reload
http://www.akiyoko.com/
http://www.akiyoko.com/admin/
にアクセスして、動作確認します。
6.2. SSL証明書をサーバに設定して動作確認
次に、Nginx で SSL証明書の設定をして、動作確認を行います。
3.4.でダウンロードした SSL証明書をサーバに配置します。
### SSL証明書をサーバに転送(on Mac) $ scp -i ~/Downloads/T1-key.pem ~/Downloads/www_akiyoko_com.crt ubuntu@52.68.xxx.xxx:/home/ubuntu/
### SSL証明書を配置 $ sudo mkdir /etc/nginx/ssl $ sudo mv /home/ubuntu/www_akiyoko_com.crt /etc/nginx/ssl/
秘密鍵をサーバに配置します。
sudo vi /etc/nginx/ssl/www_akiyoko_com.key --- 3.2.で保存した秘密鍵をペースト ---
Nginx の設定ファイルを SSL用に書き換えます。
$ sudo vi /etc/nginx/sites-available/default --- upstream myproject_backend { server unix:/tmp/myproject.sock fail_timeout=0; } server { listen 443 ssl; server_name www.akiyoko.com; ssl_certificate /etc/nginx/ssl/www_akiyoko_com.crt; ssl_certificate_key /etc/nginx/ssl/www_akiyoko_com.key; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /opt/webapps/myproject; } location / { proxy_set_header Host $http_host; 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 $scheme; proxy_pass http://myproject_backend; } } --- $ sudo service nginx reload
最後に、
https://www.akiyoko.com/
https://www.akiyoko.com/admin/
にアクセスして、SSL通信が正しく行えるかチェックをします。
7. まとめ
個人サイト向けの「RapidSSL Standard」であれば(事前準備ができていれば)審査は数分で完了するので、やり方さえ分かれば、ものの一時間ほどでドメインの取得から SSLサーバ証明書の取得まで完了させることができます。
「年額3.65ドルでSSL証明書を手に入れる - Qiita」のように年額3.65ドルとまではいきませんでしたが(「Comodo Positive SSL」の3年契約なら年額3.65ドル)、国内のサイト(例えば「SSLストア」 )であれば最安 2,980円くらいする「RapidSSL Standard」が年額8.85ドル(約1,100円)で取得できるというのは、かなりお得な感じがしました。
*1:省略可。同一コモンネームで複数の証明書が必要になる場合の区別のために使う。