SSLストアで、1,200円/年 の SSL証明書 (  COMODO PositiveSSL ) を買って Nginx で使う

SSL証明書のコストは、いいとこの物を買うと年間数万円ほどかかってしまいますが、SSLストアのお安いもので充分だと思います。10ドメインほど買い、iOS9やブラウザから使っていますが現状問題ありません。サーバも、Nginx, Apache, AWS ELB で使っていますが、問題なく使用できています。

2015年12月現在、最安は 1,200円/年 の COMODO PositiveSSL です。これで、開発環境の管理サイトSSLもオレオレ証明書から卒業できますね。

# 1. 確認メールアドレスの準備

証明書のアクティベート時に確認メールが送られてくるため、申請ドメインの admin@ のメールアドレスを受信可能にしておく必要があります。他には、 postmaster@ や、whoisに登録されているアドレス に送信することができます。
(証明書のアクティベート時に選択できます)

申請ドメインが dev.example.com であれば、 admin@example.com, postmaster@example.com, admin@dev.example.com, postmaster@dev.example.com などのうち、どれか1つが受信可能にななっている必要があります。

# 2. SSLストアの会員登録

http://www.ssl-store.jp/ ここから、案内に従って会員登録します。
(登録アドレスは 1. のメールアドレスではなく、汎用的に使えるアドレスにしておきます。)

# 3. 入金

SPIKE で、デポジット入金して 証明書を購入できます。
管理画面の 代金支払 → クレジットカードで入金 より。

今回は 1,200 円だけ入金すれば充分です。

SPIKE アカウントがあれば、秒殺で入金できます。

# 4. 証明書の購入

管理画面から、証明書 → 証明書購入。 Comodo → COMODO PositiveSSL 1年 の「新規」ボタンを押下。あとは案内に従って進めます。

# 5. 証明書のアクティベート

購入を完了すると、証明書 → 証明書管理 に「アクティベート待ち」 の証明書が出てきますので、
「詳細」→「アクティベート(申請)する」をクリック

CSR を求められますので、一旦ブラウザから離れて CSR を作成します。

# 6. CSR のを作成

openssl を使って、CSR を作成します。mac のターミナルからで良いでしょう。

```bash
$ openssl req -new -newkey rsa:2048 -nodes -out ドメイン名.csr -keyout ドメイン名.key -subj "/C=JP/ST=Tokyo/L=区/O=会社名/CN=ドメイン名"
```

それぞれ、間違いの無いように入力します。

すると、ドメイン名.csr と ドメイン名.key が出来ます。

# 7. CSR の入力

先ほどできた CSR の内容を、ブラウザのCSR 欄に貼り付けします。

mac であれば、

```bash
$ cat ドメイン名.csr | pbcopy
```

でコピーすると良いでしょう。(cat で表示されたものをマウスで選択してコピーでも問題ありません)

アクティベートフォームの「サーバの種類」は、Apache や Nginx であればデフォルトの「ApacheOpenSSL」で問題無いでしょう。

CSR をペーストしたら「次に進む」をクリック

# 8. アクティベートつづき

CSRのパース結果が表示されますので、「コモンネーム」が間違ってないか超確認します。例えば、表示内容をコピペして ping してみるとか、ブラウザから開いてみるなどして、間違いの無いようにします。

承認メールアドレスを選択し、ドメイン所有者情報も入力していきます。

(一度入力してしまえば、以降はブラウザの履歴からの補完機能で入力すると楽です。入力欄をダブルクリックで履歴の表示)

入力が終わったら「次に進む」をクリック

# 9. アクティベート確認

コモンネーム、承認メールアドレスをもう一度よく確認しておきます。

最終確認のチェックボックスを入れ、「上記の内容で申請」をクリック

# 10. アクティベート承認確認メールから、メールアドレス認証

**アクティベート時にラジオボタンで選択したメールアドレス** (例: admin@〜) に、
`ORDER #xxxxxxxx - Domain Control Validation for ドメイン名`

という件名のメールが送信されてきます。

メール文中の validation code をコピーし、その上の please browse here のリンクをクリックし、表示されたフォームに先ほどのバリデーションコードを貼り付け、Next をクリック。

Thank you と言われるので、次は **アクティベート時にテキスト入力したメールアドレス** の受信をチェックします。

`ORDER #xxxxxxxx - Your PositiveSSL Certificate for ドメイン名`

というメールが来ますので、内容を見ます。

# 11. Nginx用証明書ファイルの作成

メール本文にベタっと ドメイン証明書が書かれており、また添付zipファイル内にも同じドメイン証明書入っています。

添付ファイルの中には、中間証明書も入ってますので、zip を展開します。

- AddTrustExternalCARoot.crt
- COMODORSADomainValidationSecureServerCA.crt
- COMODORSAAddTrustCA.crt
- ドメイン名.crt

が入ってます。

Apache では、中間証明書は SSLCertificateChainFile で指定しましたが、Nginx では中間証明書はサイト証明書ファイルに連結して使用します。

```bash
$ cat ドメイン名.crt COMODORSADomainValidationSecureServerCA.crt  COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > ドメイン名.nginx.crt
```

このように連結しておきます。

# 12. Nginx用証明書のアップロードと設定

先ほどの証明書と、6. で作った ドメイン名.key を サーバにアップロードし、
Nginx のサイト設定ファイルで

```
listen 443 ssl;

ssl_certificate /path/to/ドメイン名.nginx.crt;
ssl_certificate_key /path/to/ドメイン名.key;
```

と設定してNginxをリロードすれば、警告無くHTTPS通信ができるはずです。

# 13. AWS ELB の場合

AWS の場合、SSLの暗号処理は ELB にまかせ、ELB->EC2 は平文HTTPで良いでしょう。
(いわゆる SSLアクセラレータ)

ELBに証明書を登録する必要がありますが、AWS管理画面からコピペで登録できます。

ロードバランサーの SSL 証明書の更新 - Elastic Load Balancing
http://docs.aws.amazon.com/ja_jp/ElasticLoadBalancing/latest/DeveloperGuide/elb-update-ssl-cert.html

Certificate Chain: には、
 COMODORSADomainValidationSecureServerCA.crt, COMODORSAAddTrustCA.crt, AddTrustExternalCARoot.crt を連結したものを入れましょう。

※ AWS の場合、中間証明書の結合の順番は重要です。適切でないと、Web管理サイトで証明書のアップロードができません。ルート証明書が一番下です。

詳細: [サーバー証明書の管理 - AWS Identity and Access Management](
http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_server-certs_manage.html#SampleCert)