Nodeクックブックのレシピ7.4や7.5のサンプルコードをインターネット上のサーバで警告なしに動作させるためには証明書が必要です。ここではStartSSL(https://www.startssl.com)で無料の証明書を取得する方法を説明します。本ページの手順で取得する証明書はドメイン認証型です。
https://www.startssl.comで右上のアイコンをクリックし、ログイン・登録ページへ移動する
ログイン・登録ページ(「Authenticate or Sign-up?」)ページで、Sign-upを選びます。
Express Laneを選ぶと一度プロセスから抜けてしまった場合わかりづらくなるので、今回はExpressを使用せずにSign-upから始めます。
Sign-upフォームに必要事項を記入し、Continueをクリックします。
警告が出るのでOKし、確認コード入力画面に遷移します。
警告内容は、入力事項が自分自身のものであることの確認と、StartComの規約に従うようにとの確認です。
同時に、登録メールアドレスに確認コードを記載したメールが送信されます。コード入力画面で確認コードを入力するまではこのページを閉じないようにしてください。
確認コードを入力すると、クライアント証明書がインストールされます。
MacOS X ChromeもしくはSafariの場合はキーチェーンに証明書がインストールされます。Firefoxの場合はブラウザに保存されます。別のブラウザや別のマシンで使う場合は、証明書をコピーしておき、それぞれのブラウザにインストールする必要があります。
対象ドメインの所有確認を行います。
確認コードを入力した時点でログインし、コントロールパネルに移動しているので、Validations Wizardタブを選択します。
ログアウトしてしまった場合は、右上のアイコンからログイン・登録ページに移動し、Authenticationを選びます。
Domain Name Validationを選択してContinueをクリックします。
ドメイン名を入力してContinueをクリックします。
確認メール送信先のメールアドレスを選び、Continueをクリックします。
メールで送信された確認コードを入力します。
ドメインの所有確認に成功すると、コントロールパネルの右側のメニューにあるDomain Validationの「+」をクリックすると、そこに成功したドメイン名が表示されます。
証明書ウィザードで証明書を発行します。
コントロールパネルでCertificate Wizardタブを選択します。
Certificate TargetとしてWeb Server SSL/TLS Certificateを選択し、Continueをクリックします。
この画面でプライベートキーを作成します。
10-32文字の任意のパスワードを入れます。その他のオプションは大抵の場合はそのままで問題ありません。
入力すると次のページでプライベートキーが生成されます。これを【key.pem】として保存しておきます。
一旦startsslのサイトから離れて、ローカルマシンのコマンドラインなどを開き、次のコマンドでkey.pemからCSRを生成します。
% openssl req -new -key key.pem -out csr.pem
作成した【csr.pem】を保存しておきます。
startsslに戻り、テキストエリアに先ほど生成したcsr.pemの内容をペーストし、Continueをクリックします。
複数ドメインの所有確認を行なっている場合は、証明書を発行するドメインを選択します。
サブドメイン名を入力します。実際にサブドメインを指定する必要がない場合でも入力しなければならないので、wwwなどを入力しておきます。ベースドメイン名はAlt Nameセクションに含まれます。(psginc.jpの場合、wwwを指定するとwww.psginc.jpとpsginc.jpに対して有効になります。)
Continueをクリックしてしばらく待つと証明書が発行されます。この内容を【cert.pem】として保存します。
証明書のテキストボックスの下にintermediate CA certificateをダウンロードできるリンクがあるので、そのリンク先の内容を【sub.class1.server.ca.pem】としてローカルに保存します。
https.createServerに渡すオプションを変更します。以下はレシピ7.4のコードの例です。
var opts = {
ca: fs.readFileSync('sub.class1.server.ca.pem'),
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem')
}
key.pem、cert.pemとsub.class1.server.ca.pemをオプションで指定したパスに置き、nodeでスクリプトを実行すると、HTTPSサーバがたちあがります。
key.pemを作成する際にパスワードを指定している場合は、実行時にこのパスワードの入力を求められます。