安くて早い!ラピッドSSL証明書をさくらで取得して適用してみた

早起きが得意でおなじみのイマグマです。
毎朝4時に起きて、4時10分には会社について仕事しています。

こんな経験ありませんか?
* chromeで自分の作成した(管理している)サイトにつながらなくなった!
* アドレスバーが赤い!

恐怖のSSL証明書の期限切れです。
更新は毎回やる作業なのに、毎回手順を調べちゃってるんですよね。。

と、いうことで、SSL証明書の更新の手順について世界一分かりやすくお伝えしたいと思います。

今回は、
* 作業PC…Mac
* サーバーOS…Linux CentOS 6.6
* webサーバー…nginx
という環境でやります!

まずは申込み!

今回はさくらのSSLのラピッドSSLを申し込んでみます。

さくらのSSL
ラピッドSSLは1年分無料!!すごい!(※2016年1月13日までらしいです!)
ただでさえ激安なのに。。
ありがとうございます!

この画面中段の「ラピッドSSL」の「オンラインからお申し込み」をクリックします。

スクリーンショット_2016-01-10_10_25_09

会員登録かログインするか選択できる画面が表示されます。

スクリーンショット_2016-01-10_10_25_38
※ここでは既にアカウントを持っていますのでログインしました。
※会員登録も簡単なので画面に沿って進めてください。

プラン選択をします

スクリーンショット_2016-01-10_10_26_10
※ラピッドSSLが安すぎるので3年とかにしてもいいと思います。
その下のお支払情報等を入れてください。
最速でSSL証明書を取得するためにはクレジットカード決済をしました!

同じ画面です。「同意する」にチェックを付けて「CSRの入力へ進む」をクリックします。
スクリーンショット_2016-01-10_10_26_48

ここ!この画面を見て拒絶反応が出ちゃうんですよね。。でも大丈夫!

スクリーンショット 2016-01-10 18.15.57

これから先の道のりが長いのか、短いのかが分からないから人は挫折する

ですよね。
なので、この先の道のりを簡単に。。
↓こんな感じです。すぐです。

  1. (手元のパソコン) 秘密鍵というkeyファイルを作成する…(1)
  2. (手元のパソコン) (1)のファイルを使ってCSRというファイルを作成する…(2)
  3. さくらのSSL画面にCSRの内容を入力する
  4. ドメインを所有しているか確かめられる(後述)
  5. 確認が終わると、サーバー証明書をダウンロードできるようになる
  6. 証明書ファイルとCSRファイルを合体させる…(3)
  7. サーバーに合体した証明書(3)とキーファイル(1)を配置して、nginxを再起動する

黒い画面?!大丈夫です。あなたが黒い画面でやることは3つ(とあとちょっと)だけ!
※この番号で作成したファイルを使います。番号が重要なので、覚えておくか、またここに戻ってきてください。

(1) 秘密鍵ファイルの作成(コマンド1行で一発!)
(2) CSRファイルの作成(コマンド1行と質問に応えるだけ一発!)
(3) 後でダウンロードできるようになるサーバー証明書とキーファイルを合体させる

早速やってみましょう!

少し黒い画面が続きますが、めったにエラーは起きないですよ。

作業場所:お手元のPCのターミナル

準備:SSL用のディレクトリを作ろう

sample.comという名前でフォルダを作成します。
ここを作業ディレクトリにしましょう。
毎年更新なので年でディレクトリを作成しました。

mkdir ~/ssl/2016/sample.com
cd ~/ssl/2016/sample.com

(1)秘密鍵ファイルを作成します

たった1行のコマンドを打つだけ!

openssl genrsa -out sample.com.2016.key 2048

結果はこんな感じです↓

Generating RSA private key, 2048 bit long modulus
.........................+++
.........................+++
e is 65537 (0x10001)

作業ディレクトリの中を見ると、「sample.com.2016.key」というファイルができていると思います。
これが(1)秘密鍵ファイルです!

(2)CSRファイルを作成します

openssl req -new -sha256 -key sample.com.2016.key -out sample.com.2016.csr

質問が始まるので回答します
JPとかKagoshimaとかですね。
一番大事なのはコモンネーム Common nameの質問です。
ここは申請したいドメイン名にしてください。

パスワードは空のままEnterを押しました。

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Kagoshima
Locality Name (eg, city) []:Kagoshima 
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Unimal Co., Ltd.
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []sample.com  
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

作業ディレクトリの中を見ると、「sample.com.2016.csr」というファイルができていると思います。
これが(2)CSRファイルです!

このCSRファイルの中身を見ないといけない!

これもコマンド一発ですね。

cat sample.com.2016.csr

こんな結果が出ます。これを全部コピーします。

-----BEGIN CERTIFICATE REQUEST-----
MIICr....

~~~ 中略 ~~~

Ehn...
-----END CERTIFICATE REQUEST-----

そう!これを先ほどの画面に貼り付けるわけですね!
スクリーンショット 2016-01-10 18.15.57

貼り付けて真ん中の「>」ボタンを押すと、(2)CSRファイル作成時の質問に答えた内容が表示されます。
スクリーンショット_2016-01-10_10_40_11

問題なければ、「確認画面へ進む」をクリックしてください。

次の確認画面をよく確認して問題なければ、「この内容で申し込む」をクリックしてください。

申し込み完了しました!
スクリーンショット_2016-01-10_10_40_39

申し込み完了メールが届きましたか?
この時点では申込みが完了しただけで、肝心の(3)の素になるサーバー証明書がまだ手に入っていません。

ドメインの所有権をラピッドSSLに知らしめてやる

今回の証明証はドメインに対しての証明書です。
ラピッドSSL側もそのドメインが実在し、申請者が所有・管理しているものなのかを知らなければ証明書を発行できないわけです。
だから、申請した「sample.com(例)」のドメインの所有権をラピッドSSLに教えます。

具体的には、
1. (あなた)指定されるhtmファイルを所有ドメインが向いているサーバーのドキュメントルートに配置します。
1. (ラピッドSSL側)システムが、申請されたドメインにhttpかhttpsで一定間隔でアクセスしてきて、指定したhtmファイルがあるか、内容が正しいかをチェックします。

だけです。

まずは指定されるhtmファイルを入手します。

この手法は、さくらから来るメール「SSLサーバ証明書 認証ファイルのアップロードについて」の手順通りに進めるだけです。

さくらの会員メニューにログインします。

上部の「契約情報」 > 「契約サービスの確認」をクリックします。
スクリーンショット_2016-01-10_10_54_43

先ほど申し込んだSSL ラピッドSSLをクリックして詳細を表示します。
スクリーンショット_2016-01-10_10_55_09

ありました!
「認証ファイルDL」ボタン!
早速押してダウンロードしましょう!

「******.htm」というファイルがダウンロードできましたよね?

これを申請したドメインが向いているWebサーバーのドキュメントルールに置きます。
FTPやSCPなどお使いの方はそのまま転送してください。

FTPやSCPが怖い方向け

これをテキストエディタとかで開きましょう!
謎の数字と文字が羅列されますよね。これをコピーしておきます。

sshでウェブサーバーにつなぎます。
新しいターミナルを開いてください。(さっきまで作業していたターミナルはそのままにします)

ssh sshユーザー名@sample.com とか
 ssh sshユーザー名@sample.com -i 鍵ファイルのパス

とかでつなぎます。

ドキュメントルートまで移動します。

cd /var/www/******** とか

そこにファイルを作成します。
※ダウンロードした認証用ファイルは拡張子が「.htm」なので注意が必要です。「.html」じゃありません。

viというエディタコマンドです。

vi ******.htm
  1. iキーを押す(編集モードになる。解除はescキー)
  2. コピーしていた******.htmの内容をペーストする(編集モードならCmd+Vでいけます)
  3. escキーを押す(編集モードを解除する。)
  4. :wqと打つ(編集モードで打たないでくださいね)

******.htmlというファイルができているはずです。

あとは、ラピッドSSLのクローラーが見に来るのを待つだけです。。(これには5分ぐらいかかりました。)

そうすると「SSLサーバ証明書発行のお知らせ」というメールが届きます。

いよいよ終盤!サーバー証明書を適用!

さくらの会員メニューにログインします。

上部の「契約情報」 > 「契約サービスの確認」をクリックします。
スクリーンショット_2016-01-10_10_54_43

先ほど申し込んだSSL ラピッドSSLをクリックして詳細を表示します。 

おお!「サーバー証明書DL」ボタンに変わっています!

このボタンを押して「server.crt」をダウンロードしましょう。

ダウンロードした「server.crt」は最初に作成した作業ディレクトリにコピーまたは移動しておきます。

cp ~/Downloads/server.crt ~/ssl/2016/sample.com
次に(3)サーバー証明書とcsrを組み合わせたファイルを作成します!

ターミナルで

cd ~/ssl/2016/sample.com
cat sample.com.2016.csr server.crt > sample.com.2016.pem

と打つと、「sample.com.2016.pem」というファイルが作成されます。

この「sample.com.2016.pem」が(3)です。

cat sample.com.2016.pem

と打ち込んで、ファイル内容を表示して、

—–BEGIN CERTIFICATE REQUEST—–
から
—–END CERTIFICATE—–
までをコピーしておきます。

最後の手順、サーバーでの作業です。

新しいターミナルを開いておきます。
さっきまで作業していたターミナルは取っておいてくださいね。

先ほど認証用のhtmファイルを置いたときと同じサーバーに接続します。

ssh sshユーザー名@sample.com とか
 ssh sshユーザー名@sample.com -i 鍵ファイルのパス

とかでつなぎます。

必要なファイルを移動する

FTPやSCPができる方は、ファイル転送をしてください。

ここでは、そういうコマンドを使わずに、コピペで全部やってしまいます。

今年のSSL更新用ファイル類を入れるディレクトリを作成します。

mkdir ~/2016
cd ~/2016
まずは(3)の証明書ファイルとCSRをくっつけたものからコピペしていきます。
vi sample.com.2016.pem

viエディタがターミナル上で開いていることになります。

  1. iキーを押す(編集モードになる。解除はescキー)
  2. Cmd+Vで貼り付ける(先ほど、sample.com.2016.pem(3)の内容をコピーしているはずです)
  3. escキーを押す(編集モードが解除される)
  4. :wqと打つ(編集モードで打たないでくださいね)
次に(1)の秘密鍵ファイルをコピペします。

最初に開いていたターミナル(ローカルで作業していたもの)を開きます。
そこで一番最初に作成した(1)秘密鍵ファイルの内容を表示します。

cat sample.com.2016.key

—–BEGIN RSA PRIVATE KEY—–
から
—–END RSA PRIVATE KEY—–
までをコピーします。

次に、sshでサーバーにつないでいる方のターミナルを開きます。(接続している状態で、cd ~/2016している)

vi sample.com.2016.key

と打ちます。

viエディタがターミナル上で開いていることになります。

  1. iキーを押す(編集モードになる。解除はescキー)
  2. Cmd+Vで貼り付ける(先ほど、sample.com.2016.key(1)の内容をコピーしているはずです)
  3. escキーを押す(編集モードが解除される)
  4. :wqと打つ(編集モードで打たないでくださいね)

nginxに(1)と(3)のありかを教える

サーバー上のnginxの設定を変更します。

nginxの設定ファイルは、/etc/nginx/nginx.confがデフォルトです。
それ以外に設定ファイルを追加している場合は、そちらをいじってください。

/etc/nginx/nginx.confをcatで開いて、「include *****」と書いてある場合、そのフォルダの下にある設定ファイルも読み込んでいることになります。

vi /etc/nginx/*******.conf

※↑設定ファイルの中で申請ドメインで443ポートの設定をしているconfファイル
※パーミッションがどうとか、:wqしたときに読み込み専用ですみたいなことを言われた場合は、sudo というのを最初につけてください。

sudo vi /etc/nginx/*******.conf

viエディタがターミナル上で開いていることになります。

ここを修正します。
修正はこれまでしてきたように、iキーで編集モードにして、十字キーで対象の場所に移動。
消して書き直すという方法でOKです。

最後はescキーを押してから:wqで保存します。

server {
  listen 443 ssl;

  #(3)のファイルのありか
  #ssl_certificate /guma/2015/sample.com.2015.pem;
  ssl_certificate /guma/2016/sample.com.2016.pem;

  (1)のファイルのありか
  #ssl_certificate_key /root/2015/sample.com.2015.key;
  ssl_certificate_key /root/2016/sample.com.2016.key;

  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers   HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers   on;

  server_name sample.com;

  location / {
    proxy_pass http://sample.com;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 86400;
  }
}

さぁ、nginxに設定ファイルを反映します。
ドキドキしますね。

service nginx reload

restartでなくて、reloadします。
サーバーが再起動せず、新しい設定ファイルを読み込んでくれます。

※権限エラーの場合はsudoをつけてくださいね。

さぁ確認!

ブラウザで申請したドメインにhttpsでアクセスします。
スクリーンショット_2016-01-10_11_28_34

おお!有効期限が伸びています!(私は3年分で申請したので3年後に伸びています。モザイクだらけなのは別に意味は無いです。。)

もうSSL証明書の更新は怖くない!

今回はSSL証明書の更新で、対象はnginxと限定してお届けしましたがいかがでしたでしょうか?
非常に長い記事になりましたが、できるだけ端折らずに説明をするために長くなっただけで、
作業量が膨大というわけでないことを分かっていただければうれしいです。

事前にカレンダーに期限切れ予定日を登録しておくなどの準備はもちろんですが、急な期限切れサーバーの発見というのは起きてしまうもの。。
そんなときのために、この記事が少しでも助けとなれば幸いです。

Author Profile

Shinya Imaguma
株式会社ユニマル代表取締役CEO and エンジニア。
Web制作チームのためのクリエイティブ・プラットフォーム『universions』では開発・運用を担当。
早起きが得意。

フォローして続編をチェック

@universionsをフォロー