http-serverコマンドでHTTPS、CORSサーバをたてる

「フロントエンドをHTTPS化してHTTP公開しているREST APIに接続したい、でも自分のPCにApacheやNginxを入れてHTTPS化するのは面倒くさい」

開発中ってこういうニーズと悩みが結構多いです。HTTPS環境化でないと動かないHTML5 APIが増えてきたことで、さらに需要が増してきた感があります。

HTTPサーバ機能を提供してくれるソフトウェアは数あれど、Nodeモジュールのhttp-serverはこういったアドホックなニーズに簡単にマッチしてくれます。

SSL化する為のファイルを一度作ってさえしまえば、HTTPS開発環境を簡単に作れるようになります。

http-serverコマンドとは

必要最低限、かつ十分なHTTPサーバを起動する為のオーソドックスなNodeモジュール。

https-serverコマンドで起動したHTTPSサーバの後ろに別サーバのREST APIがいる想定で起動します。

サーバ証明書を作る

どんなに簡単にHTTPSサーバ起動出来るソフトウェアでもCA証明書、サーバ証明書、サーバ秘密鍵は作っておく必要があります。

opensslを使って以下の3ファイルを作っておきます。最初は大変ですが、同じPCをサーバにするなら何度でも使いまわせるので一度作り置きしておくと便利に使えます。

  1. CA証明書:cacert.crt(OSにインストールしておく)
  2. サーバ秘密鍵:nopass_server.key
  3. サーバ証明書:server.crt

オプションに証明書、鍵ファイルを指定してhttp-serverコマンドを実行

http-server -p 80 -c0 -P http://localhost:8080/ \
  --cors --ssl --key c:\openssl2\nopass_server.key \
  --cert c:\openssl2\server.crt

コマンド起動後、80ポートで起動したHTTPSサーバから8080ポートのRESTサーバにSOP(Same Origin Policy)違反することなく通信出来るようになります。