HTTPSテスト環境の選定
前回、HTTPSテスト環境について説明してきました。証明書の作成には、mkcert を用いるとして、HTTPSサーバーには、下記のようなものがあり、複数の選択肢があることがわかりました。
- Node.jsサーバー
- http-server
- Express
- Vite
👉 この中で、今回は、以下の組み合わせで環境構築していくことにします。
- HTTPS証明書 → mkcert
- HTTPS対応のサーバープログラム → Express
理由:
- 自由度の高さ
- ヘッダーも自由に設定可能
- 今後の拡張性
環境構築手順
- ローカル認証局ツール(mkcert)の導入
- mkcertにより、HTTPS証明書の作成
- Expressを利用した server.js の作成
- server.js の起動
改めて mkcert とは?
mkcertは、Filippo Valsorda(FiloSottile)さんによって開発されたツールです。ローカル開発環境で信頼できるSSL証明書を簡単に作成することが可能です。
| 項目 | 内容 |
|---|---|
| 開発者 | Filippo Valsorda(FiloSottile) |
| 最新リリース | v1.4.4(2022年4月26日) |
| リリース履歴 | 2020 年以降も継続的に更新 |
| ライセンス | 無料のオープンソース(OSS) |
無料で、HTTPSのテスト環境を作成するためには、欠かすことのできないツールです。 開発者の方、関係者の方には、この場をお借りして、深くお礼を申し上げたいと思います。
mkcert の導入方法
- ターミナル(管理者)の起動
- mkcert の ID 確認
- mkcert の導入
- ターミナル(管理者)の再起動
- mkcert の確認
- 自己認証局の作成
1. ターミナルの起動
Windowsの場合:
「ターミナル(管理者)」アプリのウインドウから、コマンド入力により作業を行っていきます。
- スタートボタンを右クリック
- 「ターミナル(管理者)」をクリック
- 起動許可を求めるポップアップウインドウが表示されたら、「はい」を押下
👉 これからの作業はすべて起動された「ターミナル(管理者)」のウインドウに入力します
2. mkcert の ID 確認
winget コマンドで、mkcert の ID を確認する
以下を入力:
winget search mkcert
👉 mkcert の ID が表示されます。
3. mkcert の導入
「2. mkcert の ID 確認」で表示された ID (FiloSottile.mkcertの部分)を指定して mkcert を導入します。
以下を入力:
winget install FiloSottile.mkcert
補足: ※ パッケージID(FiloSottile.mkcertの部分)は変更される可能性があるため、winget search で必ず確認して表示された値に合わせてください
4. ターミナル(管理者)の再起動
mkcertのパスを有効にする為、「ターミナル(管理者)」アプリを再起動します。
Windowsの場合:
「ターミナル(管理者)」アプリを終了した後、
- スタートボタンを右クリック
- 「ターミナル(管理者)」をクリック
- 起動許可を求めるポップアップウインドウが表示されたら、「はい」を押下
👉 これからの作業はすべて起動された「ターミナル(管理者)」のウインドウに入力します
注)再起動ではなく、ターミナルのウインドウで新しいタブを開いても大丈夫です。
5. mkcert の確認
以下を入力:
mkcert --version
👉 バージョンが表示されれば、導入完了です。
6. 自己認証局の作成
自己認証局を登録します。
以下を入力:
mkcert -install
👉 ルート証明書が作成され、Windowsの信頼済みに登録されます。
注)セキュリティ警告のポップアップ画面が表示されたら、「はい」を選択します。
サーバー証明書の発行
- ターミナルの起動
- HTTPS証明書作成
1. ターミナルの起動
Windowsの場合:
以降の作業は管理者ではない「ターミナル」アプリのウインドウから、コマンド入力により作業を行っていきます。 事故防止の為、「ターミナル(管理者)」のアプリを閉じ、下記の作業で新たに、「ターミナル」を起動してください。
- スタートボタンを右クリック
- 「ターミナル」をクリック
- 起動許可を求めるポップアップウインドウが表示されたら、「はい」を押下
👉 これからの作業はすべて起動された「ターミナル」のウインドウに入力します
2. HTTPS証明書作成
HTTPS証明書を作成します。
以下を入力:
mkcert localhost 127.0.0.1 ::1
これには、下記の意味が含まれます。各指定値アドレスでのアクセスに対応します。
| 指定値 | 意味 |
|---|---|
| localhost | ローカルホスト名(ブラウザで https://localhost を使うため) |
| 127.0.0.1 | IPv4 のローカルループバックアドレス |
| ::1 | IPv6 のローカルループバックアドレス |
👉 下記のファイルが作成されれば、成功です。
- localhost+2-key.pem
- localhost+2.pem
注)ファイル名( localhost+2 の部分)は、若干異なる場合があります。以降の作業は、作成された実際のファイル名に合わせてください。
改めて Expressとは?
Express.js は TJ Holowaychuk さんによって開発されたツールです。自由度が高く、本格的なサーバー運用も可能な為、将来的な拡張性も高いです。
| 項目 | 内容 |
|---|---|
| 開発者 | TJ Holowaychuk(後に StrongLoop → IBM → OpenJS Foundation) |
| 初回リリース | 2010年11月16日 |
| 現在の管理 | OpenJS Foundation |
| ライセンス | MIT License |
本ツールがなければ、HTTPSの開発環境の構築も容易に行うことができませんでした。 開発者の方、関係者の方には、この場をお借りして、深くお礼を申し上げたいと思います。
Express の導入
- ターミナルの起動
- プロジェクトフォルダーに移動
- Express の導入
1. ターミナルの起動
Windowsの場合:
「ターミナル」アプリのウインドウから、コマンド入力により作業を行っていきます。
- スタートボタンを右クリック
- 「ターミナル」をクリック
- 起動許可を求めるポップアップウインドウが表示されたら、「はい」を押下
👉 これからの作業はすべて起動された「ターミナル」のウインドウに入力します
2. プロジェクトのフォルダーに移動
テスト対象となるプロジェクトのフォルダーに移動します。 注)テスト対象となるプロジェクトには、「npm init -y」コマンドにより、node_modules が既に導入済みとします。
※ Node.jsの導入に関しては、過去投稿「開発環境について/Node.js環境の作成」を参照してください。
例: テスト対象となるプロジェクトのフォルダーがc:\Users\test\serverTestの場合、
以下を入力:
cd serverTest
3. Express の導入
npm コマンドを使って、Express を導入します。
以下を入力:
npm install express
👉 この例では、通常(dependencies)環境に express を導入していますが、テスト用、開発用にしか使用しない場合、「npm install -D express」コマンドで、開発用(devDependencies)環境に導入しても問題ありません。
Express サーバーの起動
- ターミナルの起動
- server.js の作成
- Express サーバーの起動
1. ターミナルの起動
Windowsの場合:
「ターミナル」アプリのウインドウから、コマンド入力により作業を行っていきます。
- スタートボタンを右クリック
- 「ターミナル」をクリック
- 起動許可を求めるポップアップウインドウが表示されたら、「はい」を押下
👉 これからの作業はすべて起動された「ターミナル」のウインドウに入力します
2. server.js の作成
Expressサーバーの定義ファイル”server.js”をJavascriptで作成します。
例:テスト対象となるプロジェクトのフォルダーを、下記のような構成であると仮定して説明します。
C:\USERS\TEST\SERVERTEST
│ localhost+2-key.pem → HTTPS証明書(キー)
│ localhost+2.pem → HTTPS証明書
│ server.js → 作成するExpressサーバーの定義ファイル
│
└─public → https公開ルート
index.html
script.js
style.css
table_class.js
注)「localhost+2-key.pem」と「localhost+2.pem」は、テスト対象となるプロジェクトのフォルダー直下にコピーした前提となっていますが、コピーしない場合は、下記、server.js 内のfs.readFileSync()のパラメータのパスを調整するようにしてください。
👉 ここでは、Windows標準の「メモ帳」アプリを使用します。
以下を入力:
notepad server.js
メモ帳にて、以下を入力して保存:
const https = require("https");
const fs = require("fs");
const express = require("express");
const app = express();
// COOP / COEP ヘッダー
app.use((req, res, next) => {
res.setHeader("Cross-Origin-Opener-Policy", "same-origin");
res.setHeader("Cross-Origin-Embedder-Policy", "require-corp");
next();
});
// 静的ファイル
app.use(express.static("public"));
// HTTPS サーバー起動
https.createServer(
{
key: fs.readFileSync("localhost+2-key.pem"),
cert: fs.readFileSync("localhost+2.pem")
},
app
).listen(3000, () => {
console.log("HTTPS server running at https://localhost:3000");
});
👉 app.use(express.static("public"))は、「/public フォルダの中身を、Web サーバのルート直下に公開する」という定義です。
3. Express サーバーの起動
Node.js コマンドで、Expressサーバーを起動します。
node server.js
👉 ブラウザにより、https://localhost:3000/にアクセスすると、テスト対象となるプロジェクトの index.html が表示されます。
まとめ
- テスト用のHTTPS環境は、サーバー環境無しでローカル環境に構築可能
- mkcert + Express により、柔軟な環境構築が可能
- Expressの導入や稼働には、Node.js プロジェクトの環境が必要
- Expressでは、Node.jsのプロジェクト毎に異なるサーバー運用も可能