Zenn
Open10

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

Gen TamuraGen Tamura

ルート証明書とサーバ証明書の説明
https://ssl.sakura.ad.jp/column/letsencrypt-root-certificate/

サーバ証明書の説明
https://ssl.sakura.ad.jp/column/ev-ssl/

SSL証明書の必要性
https://ssl.sakura.ad.jp/column/necessity-of-ssl/

昨今、Webサイトの常時SSL化というキーワードが注目されており、インターネットを通る全てのデータを暗号化しようという動きが広まってきています。
最終更新日:2017.08.29

いまは、ほぼhttps化したなぁ。httpだと少し不安になるぐらいだ。

SSL証明書の違い
https://ssl.sakura.ad.jp/column/attestation-level/

さくらインターネットの記事、めちゃめちゃわかりやすい。

Gen TamuraGen Tamura
  1. 秘密鍵を作る
    openssl genrsa -out server-key.pem 2048

サブコマンド genrsa と genpkey -algorithm RSA の違い => 一緒
https://unix.stackexchange.com/a/415996

  1. 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 []:
  1. 認証要求から X.509 デジタル証明書を作る
    openssl x509 -in server-csr.pem -out server-cert.pem -req -signkey server-key.pem -days 365
Gen TamuraGen Tamura

実装

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
作成者以外のコメントは許可されていません