無料SSL証明書 startsslを取得してnginxに設定するまでのメモ


先日SSL化したサイトとは別に、業務アプリを動かしているサイトもSSL化したのでメモ。自分しか使わないので、無料のSSL証明書 StartSSLで証明書を取得して、nginxに設定しました。

現在、StartSSLは以下の理由により使用することをおすすめしません。無償のSSL証明書はLet's Encryptをおすすめします。

  • 2016年8月、中国の認証サービス会社WoSignがスタートコムを買収していたが、その後・・・
    • WoSignがGitHubのドメインの1つについて許可なく証明書を発行した
    • SHA-1証明書の発行日付を規定期限の2015年12月31日より前の日付にバックデートし偽装していた
    • その他不正がいっぱい

参考リンク

中国の認証局Wosignをめぐる問題 | デジタル証明書ニュース

中国の認証局が不正な証明書、主要ブラウザが無効化を通告

筆者は現在、StartSSLの証明書を使用しておりません。

■ 環境

$ cat /etc/redhat-release 
CentOS release 6.7 (Final)
$ nginx -v
nginx version: nginx/1.9.4
$ yum list installed | grep ^openssl
openssl.x86_64                      1.0.1e-42.el6             @base

■ StartSSL アカウント作成〜証明書取得

まずはstartcomのサイトにアクセスします。

startssl_001

トップページの真ん中にある「StartCOM SSL SECURED」をクリックします。

startssl_002

「StartSSL™ - The Swiss Officer's Knife of Digital Certificates & PKI」という画面に遷移します。

startssl_003

ここから「StartSSL™ Free(Class 1)」をクリックします。

startssl_004

以下のような画面に遷移するので、中央左下の「Certificate Control Panel」をクリックします。

startssl_005

startssl_006

「Authenticate or Sign-UP?」と聞かれるので、「Sign-UP」のボタンをクリックします。

startssl_007

startssl_008

上から名前、苗字、住所、郵便番号、市区町村を入力し、国名と都道府県をプルダウンメニューから選択し、電話番号とメールアドレスを入力します。都道府県とメールアドレスは入力必須項目です。入力したら「Continue >>>」をクリックしましょう。

startssl_009

以下のようなダイアログが表示されるので「OK」をクリックし、数分待った後にメールを確認してみましょう。

startssl_010

startcomからauthentication codeがメールで送られてきていることを確認し、以下の画面に貼り付けましょう。

startssl_011

startssl_012

秘密鍵生成の画面に遷移するので、ここでは2048bitで鍵を生成します。

startssl_013

「Install」をクリックします。

startssl_014

すると、ブラウザにStartcomのクライアント証明書が保存されます。このブラウザからしかアクセスしないサイトであれば、後にWEBサーバーへインストールするSSL証明書の他、中間CA証明書を別途インストールする必要がありません。しかし、複数のブラウザからアクセスすることを考えるとこれではいけませんので、WEBサーバーにはSSL証明書と中間CA証明書をあわせてインストールすることにします。

※ クライアント証明書はStartcomのサイトへログインするのに必要なので、エクスポートしておいて大事に保管しておきましょう。

startssl_015

ひとまずクライアント証明書を表示して確認します。

startssl_016

次に「Validations Wizard」をクリックします。

startssl_017

今回は「〜〜〜.ll4u.in」というサブドメインのSSL証明書が欲しいので、「Domain Name Validation(ドメイン名認証)」を選択します。

startssl_018

startssl_019

トップレベル・ドメインを右側のプルダウンメニューから選び、サブドメインごと入力するのですが・・・

startssl_020

いきなりサブドメインを入力するなと怒られてしまいました。

startssl_021

というわけで、サブドメインなしで再度入力します。

startssl_022

postmaster、webadmin、hostmaster、adminなどのメールアドレス宛にAuthentication Codeが送られてくるので、これらメールアドレスが受信できるようにしておきましょう。

startssl_023

「Continue >>>」をクリックして数分待つと、Authentication Codeがメールで送られてきます。

startssl_024

メール本文の「Your validation code is 〜〜〜〜」と書かれている部分をコピーしてブラウザに貼り付けましょう。

startssl_025

このように「Validation Success」と表示されたらドメイン認証が完了です。「Finish >>」をクリックします。

startssl_026

次に「Certificates Wizard」をクリックします。

startssl_027

プルダウンメニューから「Web Server SSL/TLS Certificate」を選択し、Continueをクリックします。

startssl_028

startssl_029

秘密鍵のパスワード(今ここで自分で決めたもの)を入力し、Keysizeは2048bit、ハッシュアルゴリズムはSHA2を選択してContinueをクリックします。

startssl_030

このように秘密鍵が生成されたので、テキストエディタにコピペして保存します。

startssl_031

保存したらContinueをクリックします。

次に、サブドメインを追加するので「Add Domains」の画面でプルダウンメニューから先ほど登録したドメインを選択し、Continueをクリックします。

startssl_032

ここでようやくサブドメインを入力することができます。テキストボックスにはサブドメインのみを入力し、Continueをクリックします。

startssl_033

Common Nameが先ほど入力したものであることを確認し、Continueをクリックします。

startssl_034

Additional Check Required!と表示されてしばらくすると、Startcomから「証明書発行しました」的なメールが届きます。

startssl_035

startssl_036

メールに書かれたリンク「https://www.startssl.com/?app=12」をクリックしてログインします。ログイン後、Tool Boxから「Retrieve Certificate」をクリックします。

startssl_037

プルダウンメニューから「〜〜〜.ドメイン名(Server - Class 1 - 期限)」を選択し、Continueをクリックします。

startssl_038

このように証明書が表示されるので、テキストエディタにコピペして保存します。

startssl_039

ブラウザでの作業はここまでです。

それではWEBサーバーにログインして、続きの作業を行いましょう。

■ WEBサーバーに証明書、中間CA証明書をインストールする

SSL証明書のインストール方法は前回とほぼ一緒です。中間CA証明書の入手方法も含み、公式サイトの手順に従うこととします。ここから「»» NGINX Server」のリンクをクリックして中身を確認しましょう。手順としては、

  1. 秘密鍵からパスフレーズを抜く
  2. 秘密鍵のパーミッションを600にする
  3. 中間CA証明書 http://www.startssl.com/certs/sub.class1.server.ca.pem を入手する
  4. 証明書と中間CA証明書をcatコマンドで結合して保存する

となります。ファイル名は前回の手順と合わせているので公式サイトと違いますが、やってることは一緒でこんな感じです。

秘密鍵からパスフレーズを抜く

$ sudo openssl rsa -in cert.key -out cert.key

秘密鍵のパーミッションを600にする

$ sudo chmod 600 cert.key

中間CA証明書を入手する

$ sudo curl -LO https://www.startssl.com/certs/sub.class1.server.ca.pem

証明書と中間CA証明書をcatコマンドで結合して保存する

$ sudo cat cert.pem.ORIG sub.class1.server.ca.pem | sudo tee cert.pem

秘密鍵だけでなく、証明書ごとパーミッションを600にしてしまいます。

$ sudo chmod 600 *

証明書を保存しているディレクトリはこんな感じです。cert.keyが秘密鍵、cert.pemが証明書と中間CA証明書を合体させたもの、cert.pem.ORIGが証明書、sub.class1.server.ca.pemが中間CA証明書です。

$ ls -l
合計 20
-rw------- 1 root root 1679  8月 28 22:29 2015 cert.key
-rw------- 1 root root 4298  8月 29 19:01 2015 cert.pem
-rw------- 1 root root 2208  8月 28 22:00 2015 cert.pem.ORIG
-rw------- 1 root root 2090  8月 29 19:00 2015 sub.class1.server.ca.pem

nginxを再起動する前に確認してみましょう。

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

OKですね。それではnginxを再起動します。

※CentOS6(initscriptから起動)の場合

$ sudo service nginx restart
Stopping nginx:                                            [  OK  ]
Starting nginx:                                            [  OK  ]

※CentOS7(systemdから起動)の場合

$ sudo systemctl restart nginx.service

あとは忘れずにTCP443番ポートのfirewallの穴をあけておきましょう。ね、簡単でしょう?

[amazonjs asin="4797382228" locale="JP" title="暗号技術入門 第3版 秘密の国のアリス"]