+4

🔐Node.js Expressでデータの通信をHTTPSで保護する方法

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を実装することは、ユーザーデータの保護と安全な閲覧体験を提供するために重要です。

Mình hy vọng bạn thích bài viết này và học thêm được điều gì đó mới.

Donate mình một ly cafe hoặc 1 cây bút bi để mình có thêm động lực cho ra nhiều bài viết hay và chất lượng hơn trong tương lai nhé. À mà nếu bạn có bất kỳ câu hỏi nào thì đừng ngại comment hoặc liên hệ mình qua: Zalo - 0374226770 hoặc Facebook. Mình xin cảm ơn.

Momo: NGUYỄN ANH TUẤN - 0374226770

TPBank: NGUYỄN ANH TUẤN - 0374226770 (hoặc 01681423001)

image.png


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí