如何使用 Node.js 建立 HTTPS 伺服器?


隨著網路空間和雲端應用的普及,保護線上資料和交易的安全顯得尤為重要。HTTPS 是最常用的線上通訊安全方法之一,它確保伺服器和客戶端之間傳輸的資訊經過加密,惡意第三方無法輕易攔截。本文將探討如何使用 Node.js(一個使用 JavaScript 開發伺服器端應用程式的強大且靈活的平臺)構建 HTTPS 伺服器。我們將介紹 SSL 證書的基礎知識、HTTPS 伺服器的關鍵元件,並提供使用 Node.js 設定安全伺服器的詳細說明。閱讀完本文後,您將能夠構建自己的安全 HTTPS 伺服器,保護您的線上資料並確保使用者資料的機密性。

語法

http.createServer([options][, requestListener])

http.createServer 是 Node.js 內建的 http 庫提供的一種方法,允許開發者建立一個 HTTP 伺服器,監聽傳入請求並向終端使用者傳送響應。

此方法需要兩個可選引數:

選項 (物件) - 配置物件不是必需的,開發者可以使用它根據自己的偏好自定義伺服器的行為。

請求監聽器 (函式) - 這是一個可選的回撥函式,每當檢測到傳入的 HTTP 請求時都會呼叫。此函式還接收另外兩個引數:req (請求) 物件和 res (響應) 物件。req 物件儲存有關傳入請求的詳細資訊,例如 HTTP 方法、標頭和正文。res 物件用於向客戶端傳送響應,並提供用於設定響應標頭、狀態程式碼和傳送響應正文的方法。

方法

要使用 Node.js 建立 HTTPS 伺服器,需要執行幾個步驟。首先,必須生成 SSL 證書和私鑰。您可以選擇線上服務提供商來完成此操作,但在本文中,我將使用 OpenSSL。OpenSSL 是一款軟體,允許使用者使用命令列生成自簽名證書。此證書主要用於加密伺服器和客戶端之間的通訊。獲得證書和金鑰檔案後,需要建立一個新的 Node.js 檔案並將 HTTPS 模組載入到其中。然後,使用 fs 模組將證書和金鑰檔案載入到記憶體中。這些檔案將在建立 HTTPS 伺服器例項時用作選項。您可以透過呼叫 `https.createServer()` 方法並將上述選項作為引數提供來建立 HTTPS 伺服器。現在,要使伺服器能夠監聽傳入請求,請呼叫 `listen()` 方法並提供所需的埠號以及可選的回撥函式。伺服器啟動並執行後,您甚至可以透過生成請求監聽器函式來處理傳入的請求。req 物件儲存有關傳入請求的資料,而 res 物件將響應傳送回客戶端。

示例

在開始示例之前,請執行以下命令以使用 OpenSSL 生成數字簽名證書。

openssl req -nodes -new -x509 -keyout server.key -out server.cert

以下是我們將在此示例中看到的完整程式碼:

import { createServer } from "https";
import express from "express";
import { readFileSync } from "fs";
import pkg from "body-parser";
 
import path from 'path';
import {fileURLToPath} from 'url';
 
const app = express();
 
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
 
const { urlencoded, json } = pkg;
 
app.use(urlencoded({ extended: false }));
app.use(json());
 
const options = {
   key: readFileSync("server.key"),
   cert: readFileSync("server.cert"),
};

app.get("/", function (req, res) {
   res.sendFile("index.html",{root: __dirname})
});

createServer(options, app).listen(3001, function (req, res) {
   console.log("Server started at port 3001");
});

這段程式碼是用 JavaScript 編寫的,用於構建一個提供 HTML 文件的 HTTP 伺服器。它引入了一些模組,包括來自 "https" 模組的 "createServer" 方法、"express" 模組以及來自 "fs" 模組的 "readFileSync" 方法。

程式碼定義了一個 Express 應用程式物件並設定了處理請求的必要中介軟體。中介軟體包括 "urlencoded" 函式和 "json" 函式,它們用於以 URL 編碼或 JSON 格式解析請求資料。

指令碼初始化伺服器設定,其中建立安全套接字層 (SSL) 金鑰和證書檔案以確保伺服器和客戶端之間安全且加密的通訊。之後,使用 app.get() 函式來處理伺服器的根 URL 路徑。每當在根 URL 上收到 GET 請求時,該函式都會向客戶端傳送名為 "index.html" 的 HTML 檔案。此檔案位於與指令碼檔案相同的目錄中,其位置透過使用變數 "__dirname" 來獲取。

最後,呼叫 "createServer" 函式會生成一個新的 HTTPS 伺服器實體,其中包含指定的選項和應用程式物件。例項化後,伺服器會認真地將其接收器調整到埠 3001 的特定頻率,並透過控制檯介面向用戶發出音訊視覺通知。

輸出

結論

總而言之,使用 Node.js 建立 HTTPS 伺服器是增強 Web 應用程式安全性的有效策略。透過建立和配置 SSL 證書,您可以確保伺服器和客戶端之間所有傳輸的資料都是加密和安全的。憑藉 Node.js 的靈活性和可擴充套件性,建立 HTTPS 伺服器是一個可行且高效的過程,有助於保護使用者資料並建立對您網站的信任。按照本文中描述的步驟,您可以自信地建立 HTTPS 伺服器,並享受網站得到充分保護的安心感。

更新於:2023年9月7日

1K+ 瀏覽量

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告