OpenSSL を使った Node.js & Express 環境の HTTPS 構築ガイド
Node.js、Express、OpenSSL を使ってローカルホスト用の信頼できる自己署名 SSL 証明書を作成する方法
このチュートリアルでは、Node.js用の Express フレームワークと OpenSSL を使って、ローカルホスト用の信頼できる自己署名 SSL 証明書を作成する方法を説明します。
自己署名 SSL 証明書は、信頼できる認証局 (CA) によって発行された証明書ではなく、自分で作成する証明書です。 ローカル開発環境などで HTTPS 通信を構築する場合によく使用されます。
注意点
自己署名 SSL 証明書は、ブラウザから 「信頼できない」 と認識されるため、本番環境で使用することは 強く推奨されません。 本番環境では、必ず信頼できる認証局から発行された証明書を使用してください。
手順
秘密鍵の生成
openssl genrsa -out server.key 2048
証明書署名要求 (CSR) の作成
openssl req -new -key server.key -out server.csr
上記のコマンドを実行すると、
server.csr
という名前の証明書署名要求 (CSR) ファイルが生成されます。自己署名証明書の発行
openssl x509 -req -in server.csr -out server.crt -days 365 -signkey server.key -extfile openssl.cnf
openssl.cnf ファイルには、証明書に関する情報 (有効期限、ドメイン名など) を記述します。 以下の内容を
openssl.cnf
ファイルとして保存してください。[req] distinguished_name = req_distinguished_name req_distinguished_name = subject [subject] countryName = US stateOrProvinceName = Your State localityName = Your City organizationName = Your Organization organizationalUnitName = Your Organizational Unit commonName = localhost [SAN] DNS:localhost
Express で証明書を使用する
const https = require('https'); const fs = require('fs'); const app = require('express')(); const httpsOptions = { key: fs.readFileSync('server.key'), cert: fs.readFileSync('server.crt') }; const server = https.createServer(httpsOptions, app); server.listen(3000, () => { console.log('HTTPS server listening on port 3000'); });
上記コードは、Node.js の
https
モジュールとfs
モジュールを使用して、Express アプリケーションを HTTPS サーバーとして起動します。httpsOptions
オブジェクトには、生成した証明書と秘密鍵へのパスを指定します。
補足
- 生成した証明書と秘密鍵は、安全な場所に保管してください。
- ブラウザによっては、自己署名 SSL 証明書を使用する際に警告が表示される場合があります。
- より高度な設定については、OpenSSL と Express のドキュメントを参照してください。
証明書と秘密鍵の生成
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr
openssl x509 -req -in server.csr -out server.crt -days 365 -signkey server.key -extfile openssl.cnf
Express アプリケーション
const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();
const httpsOptions = {
key: fs.readFileSync('server.key'),
cert: fs.readFileSync('server.crt')
};
const server = https.createServer(httpsOptions, app);
app.get('/', (req, res) => {
res.send('Hello from HTTPS!');
});
server.listen(3000, () => {
console.log('HTTPS server listening on port 3000');
});
実行
上記のコードを保存して、以下のコマンドを実行します。
node index.js
ブラウザを開き、https://localhost:3000
にアクセスすると、"Hello from HTTPS!" というメッセージが表示されます。
Node.js、Express、OpenSSL 以外でローカルホスト用の自己署名 SSL 証明書を作成する方法
mkcert は、ローカル開発環境向けに簡単に自己署名 SSL 証明書を作成できるツールです。
mkcert localhost
上記のコマンドを実行すると、localhost.pem
という名前の証明書ファイルと localhost-key.pem
という名前の秘密鍵ファイルが生成されます。
Let's Encrypt は、無料で信頼できる SSL 証明書を発行する認証局です。
自作のツール
Python や Go などのプログラミング言語を使って、独自のツールを作成することもできます。
- 簡単さ を重視する場合は、mkcert がおすすめです。
- 信頼性 を重視する場合は、Let's Encrypt を使用するのがおすすめです。
- 柔軟性 を重視する場合は、自作のツール を作成するのがおすすめです。
node.js express openssl