以下の作業はWSLのUbuntu上で行っている。
概要
node.jsのhttp-serverは開発時に便利なのだが、https の API に接続するときなど、https が使えればなと思うことは多い。http-serverによるローカル HTTPS server 構築 (5分でできる) - Qiita では、mkcert を使っているが、デフォで入っている openssl だけでも自己署名はできるので、そのコマンドと、~/.bashrc
に設定すると便利なエイリアスを紹介する。
自己認証局で自己証明書を発行
基本は Ubuntu Server 18.04 LTS OpenSSL 自己認証局で自己証明書を発行 の前半部に書かれている通り。僕の環境の場合初めから、/etc/ssl/
以下に cert と private というフォルダがあって、それを chown して使いまわすことにした。適宜自分で作ってもよい。
sudo openssl req -nodes -new -x509 -out /etc/ssl/certs/selfssl.pem -keyout /etc/ssl/private/selfssl-key.pem -days 36500
パスワード無しで作る際には nodes
オプションが必須。あと、実行の際に説明があるが、名前などの情報は.
を入力すれば空情報扱いになるし、それでよい。
https-server というエイリアスを設定する
~/.bashrc
に以下のエイリアスを設定しておくと便利
alias https-server="http-server -c-1 . --ssl --cert /etc/ssl/certs/selfssl.pem --key /etc/ssl/private/selfssl-key.pem"
その他
- let's encrypt も使っているので一括で証明書を管理すればとも思ったが、localhost 用の証明書を扱うようには作られていない Certificates for localhost - Let's Encrypt
- はじめ
digital envelope routines: EVP_DecryptFInal_ex: bad decrypt
というエラーが出て、僕の場合の原因は-nodes
を付けずにパスワード設定して鍵を作ったのに、http-server 呼ぶときにはパスワードを指定してなかったのが原因だった。パスワード付きにした場合はNODE_HTTP_SERVER_SSL_PASSPHRASE
という環境変数にパスワードを設定する旨、http-party/http-server: a simple zero-configuration command-line http server の README に書いてあった。実は openssl のコマンドについても、nodes についても、ここにちゃんと書いてある。ググる前に公式文書読めって話でした。