本記事で紹介している証明書は2018年10月にリリースされる
GoogleChromeで不正な証明書と判定されてしまう予定です。
証明書更新する際は注意してください。

Webアプリを作っていて、ログインする機能や、ユーザの情報を入れてもらうような機能を作る場合、通信はhttpではなくhttpsで暗号化すべきかと存じます。サーバ証明書を設定する機会は新しいアプリを作るとき、または、証明書の更新時(1年に1回)しかないため、毎回設定の手順を忘れて0から作り直しています。そのため、今回は次の証明書設定時に困らないよう、Nginxにサーバ証明書を設定する手順を以下に残しておきたいと存じます。

導入するサーバ証明書

国内最安値と有名なSSLBOXのラピッド証明書を選択します。
(企業として公開するものではないため、EVや企業認証ではなくドメイン認証の証明書を利用します)
無料で発行できるものもありますが、不特定多数のユーザが利用する可能性があるため、ある程度実績があって、有料であるものを利用しようと思います。

これです
rapid.png

証明書発行の申請

・SSLBOXに会員登録する
・課金
・コモンネーム、CSRの登録画面
 コモンネームは、取得したドメイン名を記入
 CSR作成手順

Nginxを動かすサーバで実施

前提
Nginxを以下に配置している
/etc/nginx/

$ openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

$ cd /etc/nginx/

#秘密鍵の作成
$ openssl genrsa -des3 -out ./ssl.key 2048
Enter pass phrase for ./ssl.key:
Verifying - Enter pass phrase for ./ssl.key:

#CSRの作成
$ openssl genrsa -des3 -out ./ssl.key 2048
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Otaku
Organization Name (eg, company) [Default Company Ltd]:OtakuIinkai
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server hostname) []:example.co.jp
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

#生成したCSRを開き、フォームにコピーする
$ cat ssl.csr
-----BEGIN CERTIFICATE REQUEST-----
(略)
-----END CERTIFICATE REQUEST-----

・メールによるドメイン認証
SSLを発行してもらうドメインのメールアドレスに確認用のメールが
送付されるので、メール本文に記載されたURLを押下する

・管理画面のステータスが「発行済み」に変わる
認証を済ませると、管理画面のステータス項目が変わります。
証明書、中間証明書が画面からダウンロードできるようになります。

・証明書のインストール
証明書をNginxに設定します

ファイルの準備

$ cd /etc/nginx

#証明書を貼り付ける
$ vi ssl.crt
-----BEGIN CERTIFICATE-----
(略)
-----END CERTIFICATE-----
 
#中間証明書を貼り付ける
$ vi cushion.cer
-----BEGIN CERTIFICATE-----
(略)
-----END CERTIFICATE-----

#証明書と中間証明書を合わせる
$ cat ssl.crt cushion.cer > ssl.pem

Nginxに設定追加

nginx.conf
server {
    listen 443;
    server_name  example.co.jp;

    ssl on;
    ssl_certificate ssl.pem;
    ssl_certificate_key ssl.key;

#(略)
}

Nginx再起動

$ systemctl restart nginx

画面にhttpsでアクセスしてみると。。。
パスフレーズで参照できないエラー

2016/03/22 22:55:45 [emerg] 10748#0: SSL_CTX_use_PrivateKey_file("/etc/nginx/ssl.key") failed (SSL: error:0906406D:PEM routines:PEM_def_callback:problems getting p        assword error:0906A068:PEM routines:PEM_do_header:bad password read error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib)

バックアップを取って、パスフレーズを外します

$ openssl rsa -in ssl.key -out  ssl.key
$ systemctl restart nginx

上記対応のあと、httpsで画面を問題なく表示できました。