34
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Nginxにサーバ証明書を設定する

本記事で紹介している証明書は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で画面を問題なく表示できました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
34
Help us understand the problem. What are the problem?