これから紹介するのは、自前の認証局を立てて証明書を発行する方法と、SSL対応のNode.jsサーバアプリのサンプルです。
0. opensslのインストール
$ sudo apt-get install openssl
1. 自前認証局を作成
以下の手順で自前認証局(Certificate Authority)の証明書ファイル(crt)を作成します。$ mkdir ~/ssl-cert && cd ~/ssl-cert
$ openssl genrsa -des3 -out ca.key 1024 $ openssl req -new -key ca.key -out ca.csr $ openssl x509 -req -days 3650 -in ca.csr -out ca.crt -signkey ca.keyこれで3650日(10年)有効な自前認証局のcrt(ca.crt)が出来上がりました。
2. サーバ証明書を発行
$ openssl genrsa -des3 -out server.key 1024 $ openssl req -new -key server.key -out server.csr $ openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crtこれで3650日(10年)有効なサーバ証明書crt(server.crt)が出来上がりました。
作成時に聞かれるパスワードは、この後作るNode.jsサーバアプリ起動時に聞かれるので覚えておきましょう。
さて、これで証明書ファイルの準備は完了です。
この後サーバアプリが必要とするのは、 ca.crt, server.crt, server.key の3つです。なお、*.keyは秘密鍵ですので、公開などしないよう、取り扱いには十分にご注意ください。
3. SSL対応Node.jsサーバアプリを作成
$ mkdir ~/hello-ssl && cd ~/hello-ssl $ touch package.json $ touch server.js
package.json
{
"name": "hello-ssl",
"description": "ssl test app",
"version": "0.0.1",
"private": true,
"dependencies": {
"express": "3.x"
}
}server.js
/* jshint undef: false, unused: false */
var https = require('https');
var fs = require('fs');
var express = require('express');
app = express();
app.get('/', function (req, res) {
var body = 'Hello World';
res.setHeader('Content-Type', 'text/plain');
res.setHeader('Content-Length', Buffer.byteLength(body));
res.end(body);
});
var sslOptions = {
key: fs.readFileSync('../ssl-cert/server.key'),
cert: fs.readFileSync('../ssl-cert/server.crt'),
ca: fs.readFileSync('../ssl-cert/ca.crt'),
requestCert: true,
rejectUnauthorized: false
};
var secureServer = https.createServer(sslOptions, app).listen('3030', function () {
console.log("Secure server listening on port 3030");
});ポイントは、sslOptions でさっき作った証明書などを指定している部分です。サーバ側のkeyとcrt、そして自前認証局のcrtの3つを指定しています。
起動
$ nodejs server.js
Enter PEM pass phrase:
Secure server listening on port 3030実行すると「Enter PEM pass phrase:」と表示され、サーバ証明書を作るときに入力したパスワードを聞かれますので入力してください。当然ですが、パスワードが違うとサーバアプリは起動されません。ブラウザで確認
https://localhost:3030/ へアクセスしてみましょう。


Firefoxで確認すると警告が出ますが、「例外を追加」ボタンを押して、「セキュリティ例外を承認」すると無事にSSL対応ページが表示されます。
0 件のコメント:
コメントを投稿