オレオレ証明書を用意し Node.js で HTTPS サーバをサクッと立てる

※2018年2月10日に改善版の記事をアップした (というか本記事はその下書き版だったのに間違えてアップしてしまった) ので、ソチラをドウゾ。


開発用に自己署名証明書を利用したオレオレ認証サーバを用意する必要が出てきたのだが、5分くらいでサクッと作れたので作り方を紹介。

開発環境は MacOS。Node.js は v6 系。

目次

オレオレ証明書を作る

まずは証明書を作る。MacOS のターミナルで openssl コマンドが使用できると思うので、コレを使う。

# キーファイルを作る
# 「orekey.pem」というファイルが生成される
$ openssl genrsa -out orekey.pem 1024

# キーファイルから CSR (署名要求・Certificate Signing Request) ファイルを作る
# コマンドを打つと対話式で国とかなんとか聞かれるので、適当に入れたり空欄で済ませたりする
# 「orecsr.pem」というファイルが生成される
$ openssl req -new -key orekey.pem -out orecsr.pem

# キーファイルと CSR ファイルから証明書ファイルを作る
# 「orecert.pem」というファイルが生成される
$ openssl x509 -req -in orecsr.pem -signkey orekey.pem -out orecert.pem

準備はコレだけ。

Node.js を使って HTTPS サーバを立てる

次に、適当な作業ディレクトリを作成し、先程作成した3ファイルを格納する。同じディレクトリに index.js を作成し、以下のように実装する。

/* 自己署名証明書 (オレオレ証明書) サーバを作成する */

const https = require('https');
const fs    = require('fs');

// 証明書のファイルを指定する
const options = {
  key: fs.readFileSync('orekey.pem'),
  cert: fs.readFileSync('orecert.pem')
};
// サーバのポートを好きに決める
const port = 3000;

// サーバを立てる
https.createServer(options, (req, res) => {
  console.log('リクエストを受信しました');
  // レスポンスの HTTP コード
  res.writeHead(200);
  // レスポンスデータを指定する。この場合ブラウザに「Hello World!」が表示される
  res.end('Hello World!');
}).listen(port);

console.log(`Self-Signed Certificate Server is running : https://localhost:${port}/`);

fshttps も、Node.js 組み込みのモジュールなので、特に npm install の必要はナシ。

サーバを起動する

あとはコレを

$ node index.js

で起動すれば良い。

ブラウザから https://localhost:3000/ にアクセスすると、信用ならない証明書のページやで〜という警告が出るはずだ。警告を無視してページを開けば、「Hello World!」と返事をしてくれる。

コレでオレオレ証明書サーバの出来上がり。手軽に作れるので開発時に有効だ。