ローカル環境でhttpsサーバを起動する(Node.js)

(key and cert) or (pfx and passphrase) が必要

key: PEM形式の秘密鍵
cert: PEM形式の証明書チェーンであるSSL(サーバ)証明書。
ca: ルート証明書を上書きする。デフォルトはMozillaのルート証明書。自己証明書の場合は、ここで指定するのが正しい?
pfx: PKCS#12フォーマット証明書 https://en.wikipedia.org/wiki/PKCS_12
passphrase: pfxで利用されるパスフレーズ

TLS: コンピュータ・ネットワークにおいて、セキュリティが要求される通信を行うためのプロトコル。SSLが元になっているため、TLS/SSLと呼ばれることが多い。
https: TLSプロトコルにて提供されるセキュアな接続環境上をHTTP通信することを指す

SSL通信の説明。とてもわかりやすい。

ルート証明書とサーバ証明書の説明
サーバ証明書の説明
SSL証明書の必要性
昨今、Webサイトの常時SSL化というキーワードが注目されており、インターネットを通る全てのデータを暗号化しようという動きが広まってきています。
最終更新日:2017.08.29
いまは、ほぼhttps化したなぁ。httpだと少し不安になるぐらいだ。
SSL証明書の違い
さくらインターネットの記事、めちゃめちゃわかりやすい。

無料と有料のSSL証明書の違い
無料だからといって、暗号化が弱いといったことはない。

自己証明書作成手順
- 秘密鍵を作る
- CSRを作る
- 証明書を作る

- 秘密鍵を作る
openssl genrsa -out server-key.pem 2048
サブコマンド genrsa と genpkey -algorithm RSA の違い => 一緒
- CSR(証明書署名要求)を作る
openssl req -new -batch -key server-key.pem -out server-csr.pem -subj "/C=JP/ST=Tokyo/L=Shibuya/CN=example.com"
-new: 証明書署名要求ファイルを新規作成
-batch: 署名しますかの対話入力をスキップ
-key: 入力する秘密鍵のファイル名
-out: 出力する証明書署名要求ファイルのファイル名
-subj: 以下のように求められる証明書のユーザ情報をUI上の要求無しに入力する。フォーマットは"/属性1=値1/属性2=値2/..."。
Country Name (2 letter code) []:
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) []:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:
- 認証要求から X.509 デジタル証明書を作る
openssl x509 -in server-csr.pem -out server-cert.pem -req -signkey server-key.pem -days 365

実装
const express = require('express');
const fs = require('fs');
const https = require('https');
const app = express();
const PORT = 8080;
const options = {
key: fs.readFileSync(`${__dirname}/server-key.pem`),
cert: fs.readFileSync(`${__dirname}/server-cert.pem`),
};
const server = https.createServer(options, app);
app.get('/hello', (req, res) => res.send('Hello World'));
server.listen(PORT, () => console.log(`Listening on https://localhost:${PORT}`));
起動
$ node server.js
Listening on https://localhost:8080
実行
$ curl https://localhost:8080/hello --insecure
Hello World