本記事で紹介している証明書は2018年10月にリリースされる
GoogleChromeで不正な証明書と判定されてしまう予定です。
証明書更新する際は注意してください。
Webアプリを作っていて、ログインする機能や、ユーザの情報を入れてもらうような機能を作る場合、通信はhttpではなくhttpsで暗号化すべきかと存じます。サーバ証明書を設定する機会は新しいアプリを作るとき、または、証明書の更新時(1年に1回)しかないため、毎回設定の手順を忘れて0から作り直しています。そのため、今回は次の証明書設定時に困らないよう、Nginxにサーバ証明書を設定する手順を以下に残しておきたいと存じます。
#導入するサーバ証明書
国内最安値と有名なSSLBOXのラピッド証明書を選択します。
(企業として公開するものではないため、EVや企業認証ではなくドメイン認証の証明書を利用します)
無料で発行できるものもありますが、不特定多数のユーザが利用する可能性があるため、ある程度実績があって、有料であるものを利用しようと思います。
#証明書発行の申請
・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に設定追加
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で画面を問題なく表示できました。