これから紹介するのは、自前の認証局を立てて証明書を発行する方法と、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 件のコメント:
コメントを投稿