こんにちは、私はトゥアンと申します。東京からフルスタックWeb開発者です。 将来の有用で面白い記事を見逃さないように、私のブログをフォローしてください。😊
Node.js ExpressでのHTTPSの導入
HTTPS(Hypertext Transfer Protocol Secure)は、Webアプリケーションでクライアントとサーバー間のデータを安全にやり取りするための重要なプロトコルです。これにより、交換されるデータが暗号化され、不正アクセス者によって傍受や改ざんができなくなります。この記事では、Node.js ExpressアプリケーションでHTTPSを設定する方法を詳しく説明します。
必要な準備
このガイドに従うには、以下のことが必要です。
- Node.jsとExpressの基本的な理解
- システムにインストールされたNode.js(バージョン10以降)
- Visual Studio Code、Sublime Text、またはAtomなどのテキストエディタ
SSL証明書の生成
HTTPSを有効にするには、公開鍵と秘密鍵のペアが必要です。これらは、SSL証明書に含まれています。証明書は、Let's Encryptなどの認証局(CA)から取得するか、開発目的で自己署名証明書を生成することができます。
自己署名証明書
OpenSSLを使用して、ローカル開発用の自己署名証明書を作成できます。
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
このコマンドで以下の2つのファイルが生成されます。
key.pem
:秘密鍵cert.pem
:公開証明書
注意: 自己署名証明書は、ブラウザのセキュリティ警告が表示されるため、本番環境では使用しないでください。本番環境の証明書には、信頼できるCAを使用してください。
ExpressでHTTPSを設定する方法
SSL証明書を取得したので、Node.js ExpressアプリケーションでHTTPSを使用するように設定しましょう。
1. 新しいExpressアプリケーションを作成
まず、プロジェクト用の新しいディレクトリを作成し、移動します。
mkdir nodejs-express-https
cd nodejs-express-https
デフォルト設定でプロジェクトを初期化します。
npm init -y
Expressをインストールします。
npm install express
2. Expressサーバーを設定する
プロジェクトディレクトリにapp.js
という新しいファイルを作成し、次のコードを追加します。
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('こんにちは、世界!');
});
app.listen(port, () => {
console.log(`アプリは http://localhost:${port} でリスニングしています`);
});
このコードは、ポート3000でリスニングし、ルートURLでアクセスされた場合に「こんにちは、世界!」と応答する基本的なExpressサーバーを設定します。
3. HTTPSを設定する
HTTPSを設定するには、https
モジュールをインポートし、それを使用してセキュアサーバーを作成する必要があります。app.js
を次のコードで更新します。
const fs = require('fs');
const https = require('https');
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('こんにちは、世界!');
});
// SSL証明書ファイルを読み込む
const privateKey = fs.readFileSync('key.pem', 'utf8');
const certificate = fs.readFileSync('cert.pem', 'utf8');
// 資格情報オブジェクトを作成する
const credentials = { key: privateKey, cert: certificate };
// Expressアプリと資格情報を使ってHTTPSサービスを作成する
const httpsServer = https.createServer(credentials, app);
// HTTPSサーバーを起動する
httpsServer.listen(port, () => {
console.log(`アプリは https://localhost:${port} でリスニングしています`);
});
このコードは、fs
およびhttps
モジュールをインポートし、SSL証明書ファイルを読み込み、資格情報オブジェクトを作成し、Expressアプリと資格情報を使用してHTTPSサーバーを起動します。これで、アプリケーションはポート3000でセキュアな接続を待ち受けるようになります。
4. HTTPSサーバーのテスト
HTTPSサーバーをテストするには、次のコマンドを実行します。
node app.js
次の出力が表示されるはずです。
アプリは https://localhost:3000 でリスニングしています
ウェブブラウザを開き、https://localhost:3000
にアクセスしてください。自己署名証明書のため、セキュリティ警告が表示されることがあります。注意して進み、「こんにちは、世界!」というメッセージが表示されることを確認してください。
HTTPトラフィックをHTTPSにリダイレクトする(オプション)
HTTPトラフィックをすべてHTTPSにリダイレクトしたい場合は、HTTPSサーバーにリクエストを転送する追加のHTTPサーバーを作成できます。app.js
を次のコードで更新します。
const http = require('http');
const fs = require('fs');
const https = require('https');
const express = require('express');
const app = express();
const httpPort = 3001;
const httpsPort = 3000;
app.get('/', (req, res) => {
res.send('こんにちは、世界!');
});
// SSL証明書ファイルを読み込む
const privateKey = fs.readFileSync('key.pem', 'utf8');
const certificate = fs.readFileSync('cert.pem', 'utf8');
// 資格情報オブジェクトを作成する
const credentials = { key: privateKey, cert: certificate };
// Expressアプリと資格情報を使ってHTTPSサービスを作成する
const httpsServer = https.createServer(credentials, app);
// HTTPSサーバーを起動する
httpsServer.listen(httpsPort, () => {
console.log(`アプリは https://localhost:${httpsPort} でリスニングしています`);
});
// HTTPSサーバーにリダイレクトするHTTPサーバーを作成する
const httpApp = express();
httpApp.use((req, res, next) => {
res.redirect(`https://${req.headers.host}${req.url}`);
});
const httpServer = http.createServer(httpApp);
// HTTPサーバーを起動する
httpServer.listen(httpPort, () => {
console.log(`HTTPサーバーは https://localhost:${httpPort} にリダイレクトしています`);
});
このコードは、http
モジュールをインポートし、HTTPSサーバーにリダイレクトするHTTPサーバーを作成し、ポート3001で接続を待ち受けます。これで、ユーザーがアプリケーションにHTTPでアクセスすると、HTTPSバージョンにリダイレクトされます。
まとめ
この記事では、Node.js Expressアプリケーションでデータの通信をHTTPSで保護する重要性について説明しました。SSL証明書の生成、ExpressサーバーのHTTPS設定、およびHTTPトラフィックのHTTPSへのオプションのリダイレクトについて説明しました。ExpressアプリケーションでHTTPSを実装することは、ユーザーデータの保護と安全な閲覧体験を提供するために重要です。
最後
いつもお世話になっています。この記事を楽しんで、新しいことを学べたら嬉しいです。😊
今度の記事でお会いしましょう!この記事が気に入ったら、私を応援するために「LIKE」を押して登録してください。ありがとうございました。