Docker上に簡易HTTPSサーバを構築する(Node.js)


HTTPSでデータのやりとりを確認したいときがあったので簡易的なHTTPSサーバを作成してみた。

環境

  • Docker
    • Version 18.03.1-ce-win65 (17513)
  • Node.js
    • v8.11.3
  • npm
    • 5.6.0
  • 使用Image
    • alpine

コンテナを作成する

docker run --name server -itd -p 8443:8443 alpine

コンテナ内にログインする

docker exec -it server /bin/ash

ashはalpineで使用されているシェル

必要なモジュールをインストールする

1.alpineのパッケージリポジトリから最新のインデックスを取得

apk update

2.Node.jsのインストール

apk add nodejs

3.npmのインストール

apk add npm

4.opensslのインストール(HTTPSの証明書作成に必要)

apk add openssl

作業用ディレクトリの作成

mkdir work
cd work

証明書ファイル(pfxファイル)の作成

openssl genrsa 2048 > mysslserver.key
openssl req -new -key mysslserver.key -subj "/C=JP/ST=Tokyo-to/L=Shibuya/O=Company Name/OU=IT dept./CN=Company Dept CA" > mysslserver.csr
openssl x509 -days 3650 -req -signkey mysslserver.key < mysslserver.csr > mysslserver.crt
openssl pkcs12 -export -inkey mysslserver.key -in mysslserver.crt > mysslserver.pfx

HTTPSサーバの作成

viで作成する。

https.js
https = require('https');
fs = require('fs');
port=8443;
https.createServer({pfx: fs.readFileSync('mysslserver.pfx')}, function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(port);
console.log('Server running at port:' + port);

サーバの起動

node https.js

疎通確認

https:localhost:8443にアクセスしてHello Worldが表示されればOK