- vừa được xem lúc

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

0 0 6

Người đăng: NGUYỄN ANH TUẤN

Theo Viblo Asia

195

こんにちは、私はトゥアンと申します。東京からフルスタック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」を押して登録してください。ありがとうございました。

Ref

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 525

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 433

- vừa được xem lúc

Một số phương thức với object trong Javascript

Trong Javascript có hỗ trợ các loại dữ liệu cơ bản là giống với hầu hết những ngôn ngữ lập trình khác. Bài viết này mình sẽ giới thiệu về Object và một số phương thức thường dùng với nó.

0 0 153

- vừa được xem lúc

Tìm hiểu về thư viện axios

Giới thiệu. Axios là gì? Axios là một thư viện HTTP Client dựa trên Promise.

0 0 145

- vừa được xem lúc

Imports và Exports trong JavaScript ES6

. Giới thiệu. ES6 cung cấp cho chúng ta import (nhập), export (xuất) các functions, biến từ module này sang module khác và sử dụng nó trong các file khác.

0 0 110

- vừa được xem lúc

Bài toán đọc số thành chữ (phần 2) - Hoàn chỉnh chương trình dưới 100 dòng code

Tiếp tục bài viết còn dang dở ở phần trước Phân tích bài toán đọc số thành chữ (phần 1) - Phân tích đề và những mảnh ghép đầu tiên. Bạn nào chưa đọc thì có thể xem ở link trên trước nhé.

0 0 245