全部產品
Search
文件中心

Certificate Management Service:在Node.js環境安裝SSL認證(Linux)

更新時間:May 30, 2026

本文介紹如何在Linux系統的Node.js伺服器上配置SSL認證,包括下載、上傳認證檔案以及驗證安裝效果的操作步驟。

前提條件

  • 已通過數位憑證管理服務購買和申請認證(狀態為已簽發)。如需購買和申請認證,請參見購買正式認證和申請認證。

  • 網域名稱已正確解析至當前伺服器。

  • 已獲得本伺服器的系統管理權限(即“root帳號”或“有 sudo 許可權”的帳號)。

操作步驟

步驟一:下載 SSL 憑證和私密金鑰檔案

  1. 進入SSL認證管理頁面,定位需部署的目標認證,並確認以下資訊:

    1. 認證狀態:確保其為已簽發。若為即將到期或已到期,則需續約SSL認證。

    2. 綁定網域名稱:確保其能夠匹配所有需保護的網域名稱,否則未匹配的網域名稱訪問 HTTPS 時將出現安全警告。如需添加或修改,請參見追加和更換網域名稱。

      確認認證是否匹配目標網域名稱

      認證的綁定網域名稱可包含多個精確網域名稱和萬用字元網域名稱。每類網域名稱的匹配規則如下:

      • 精確網域名稱:僅對指定網域名稱生效。

        • example.com 僅對 example.com 生效。

        • www.example.com 僅對 www.example.com 生效。

      • 萬用字元網域名稱:僅對其一級子網域名稱生效。

        • *.example.com 對 www.example.com、a.example.com 等一級子網域名稱生效。

        • *.example.com 對根網域名稱 example.com 和多級子網域名稱 a.b.example.com 不生效。

      說明

      如需匹配多級子網域名稱,綁定網域名稱中需包含該網域名稱(如 a.b.example.com),或包含相應的萬用字元網域名稱(如 *.b.example.com)。

  2. 在目標認證的操作列,單擊下載,下載伺服器類型為Nginx的認證。

  3. 解壓下載的認證壓縮包,其中包含以下檔案:

    • 簽署憑證:<認證綁定網域名稱>_sm2_sign.pem 和 <認證綁定網域名稱>_sm2_sign.key

    • 加密認證:<認證綁定網域名稱>_sm2_enc.pem 和 <認證綁定網域名稱>_sm2_enc.key

      說明

      如果您在申請認證時使用 OpenSSL、Keytool 等工具產生了 CSR 檔案,私密金鑰檔案僅儲存在本地,下載的認證壓縮包中不包含私密金鑰。私密金鑰一旦遺失,認證將無法使用,您需要重新購買正式認證並產生 CSR 和私密金鑰。

步驟二:安裝 SSL 憑證到 Node.js

  1. 登入 Linux 伺服器。

    後續部分命令因作業系統類型不同而略有差異。請根據實際的伺服器作業系統,選擇對應的命令操作。

    • RHEL/CentOS 系列:包括 Alibaba Cloud Linux、Red Hat Enterprise Linux、CentOS、AlmaLinux、Rocky Linux、Anolis OS 及其衍生版本。

    • Debian/Ubuntu 系列:包括 Debian、Ubuntu 及其衍生版本。

    如何確認作業系統所屬系列

    在伺服器終端執行 cat /etc/os-release,根據輸出的 ID_LIKE、ID 判斷:

    • 若 ID_LIKE 或 ID 包含 rhel 或 centos,作業系統屬於 RHEL/CentOS 系列。

    • 若 ID_LIKE 或 ID 包含 debian 或 ubuntu,作業系統屬於 Debian/Ubuntu 系列。

  2. 開放安全性群組和防火牆的 443 連接埠。

    1. 在伺服器終端執行以下命令,檢測443連接埠的開放情況:

      RHEL/CentOS

      command -v nc > /dev/null 2>&1 || sudo yum install -y nc
      # 請將以下的 <當前伺服器的公網 IP> 替換為當前伺服器的公網 IP
      sudo ss -tlnp | grep -q ':443 ' || sudo nc -l 443 & sleep 1; nc -w 3 -vz <當前伺服器的公網 IP> 443

      如果輸出 Ncat: Connected to <當前伺服器公網 IP>:443,則表明443連接埠已開放。否則需在安全性群組和防火牆中開放443連接埠。

      Debian/Ubuntu

      command -v nc > /dev/null 2>&1 || sudo apt-get install -y netcat
      # 請將以下的 <當前伺服器的公網 IP> 替換為當前伺服器的公網 IP
      sudo ss -tlnp | grep -q ':443 ' || sudo nc -l -p 443 & sleep 1; nc -w 3 -vz <當前伺服器的公網 IP> 443

      若輸出 Connection to <當前伺服器公網 IP> port [tcp/https] succeeded! 或 [<當前伺服器公網 IP>] 443 (https) open,則表明443連接埠已開放。否則需在安全性群組和防火牆中開放443連接埠。

    2. 在安全性群組配置開放443連接埠。

      請確保安全性群組已開放 443 連接埠 (TCP),否則外部無法訪問服務。以下操作以阿里雲 ECS 為例:

      1. 進入Elastic Compute Service執行個體頁面,選擇目標 ECS 執行個體所在地區,單擊目標執行個體名稱,進入執行個體詳情頁。

      2. 單擊安全性群組 > 內網入方向全部規則,確儲存在一條授權策略為允許、協議類型為 TCP、目的連接埠範圍為 HTTPS(443)、授權對象為任何位置(0.0.0.0/0)(或其它地址,確保 PC 可遠端存取即可)的規則。

      3. 如不存在上述規則,請參照添加安全性群組規則在目標安全性群組中添加相應規則。

    3. 在防火牆中開放443連接埠。

      執行以下命令,識別系統當前的防火牆服務類型:

      if command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet firewalld; then
          echo "firewalld"
      elif command -v ufw >/dev/null 2>&1 && sudo ufw status | grep -qw active; then
          echo "ufw"
      elif command -v nft >/dev/null 2>&1 && sudo nft list ruleset 2>/dev/null | grep -q 'table'; then
          echo "nftables"
      elif command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet iptables; then
          echo "iptables"
      elif command -v iptables >/dev/null 2>&1 && sudo iptables -L 2>/dev/null | grep -qE 'REJECT|DROP|ACCEPT'; then
          echo "iptables"
      else
          echo "none"
      fi

      若輸出為 none,則無需進一步操作。否則,請根據輸出的類型(firewalld、ufw、nftables、iptables),執行以下命令開放 443 連接埠:

      firewalld

      sudo firewall-cmd --permanent --add-port=443/tcp && sudo firewall-cmd --reload

      ufw

      sudo ufw allow 443/tcp

      nftables

      sudo nft add table inet filter 2>/dev/null
      sudo nft add chain inet filter input '{ type filter hook input priority 0; }' 2>/dev/null
      sudo nft add rule inet filter input tcp dport 443 counter accept 2>/dev/null

      iptables

      sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

      為避免 iptables 規則在系統重啟後失效,請執行以下命令持久化 iptables 規則:

      RHEL/CentOS
      sudo yum install -y iptables-services
      sudo service iptables save
      Debian/Ubuntu
      sudo apt-get install -y iptables-persistent
      sudo iptables-save | sudo tee /etc/iptables/rules.v4 >/dev/null
  3. 上傳 SSL 憑證和私密金鑰檔案到伺服器的目標目錄。

    重要

    本文以 ssl.pem(認證檔案)和 ssl.key(私密金鑰檔案)為例,將其上傳至伺服器的 /etc/ssl/cert 目錄。若該目錄不存在,可執行sudo mkdir -p /etc/ssl/cert進行建立。

    阿里雲伺服器

    以下操作以阿里雲Elastic Compute Service 為例進行說明,其他類型的伺服器請參照對應產品文檔進行操作。

    1. 在已登入的 Workbench 頁面中,選擇頂部功能表列的檔案 > 開啟新檔案樹。

    2. 在左側檔案樹中,右鍵點擊目標目錄(/etc/ssl/cert),選擇上傳檔案,選擇並上傳認證檔案 ssl.pem。

    3. 重複上述操作,再次右鍵點擊目標目錄(/etc/ssl/cert),選擇上傳檔案,選擇並上傳私密金鑰檔案 ssl.key。

    4. 上傳完成後,認證檔案路徑為 /etc/ssl/cert/ssl.pem,私密金鑰檔案路徑為 /etc/ssl/cert/ssl.key。

    其他雲廠商伺服器

    請通過對應雲廠商提供的檔案上傳功能,將認證和私密金鑰檔案上傳到伺服器的目標目錄(/etc/ssl/cert)。

    非雲廠商伺服器(如物理伺服器、IDC 受管理的主機等)

    在本地使用 SSH 工具上傳認證檔案和私密金鑰檔案。以下樣本中,<username>為當前伺服器的使用者名稱,<server_ip>為當前伺服器的公網 IP。

    Windows
    1. 使用系統內建的命令提示字元(cmd)或 PowerShell,通過 scp 命令上傳檔案。以認證檔案和私密金鑰檔案存在本地 C:\ 目錄為例。

      # 上傳本地認證檔案到伺服器,請將路徑 C:\ssl.pem 和 /etc/ssl/cert 替換為實際的源檔案和目標目錄
      scp C:\ssl.pem <username>@<server_ip>:/etc/ssl/cert
      
      # 上傳本地私密金鑰檔案到伺服器,請將路徑 C:\ssl.pem 和 /etc/ssl/cert 替換為實際的源檔案和目標目錄
      scp C:\ssl.key <username>@<server_ip>:/etc/ssl/cert
    2. 若系統未整合 scp 命令,可以使用開源免費的 PuTTY 用戶端,並配合其附帶的 pscp.exe 工具通過命令列上傳檔案。也可以使用圖形化的 WinSCP 上傳檔案。

    Linux/macOS

    使用系統內建的終端,執行 scp 命令上傳檔案。以認證檔案和私密金鑰檔案存在本地 /tmp 目錄為例。

    # 上傳本地認證檔案到伺服器,請將路徑 /tmp/ssl.pem 和 /etc/ssl/cert 替換為實際的源檔案和目標目錄
    scp /tmp/ssl.pem <username>@<server_ip>:/etc/ssl/cert
    
    # 上傳本地私密金鑰檔案到伺服器,請將路徑 /tmp/ssl.pem 和 /etc/ssl/cert 替換為實際的源檔案和目標目錄
    scp /tmp/ssl.key <username>@<server_ip>:/etc/ssl/cert
  4. 前往工作目錄(如 /home),建立 Node.js 專案檔 https_server_test.js。

    # /home目錄僅用於樣本,配置時請修改為實際工作目錄。
    cd /home
    
    # 建立測試專案檔案,配置時請修改為實際的專案檔。
    sudo touch https_server_test.js
  5. 編輯 https_server_test.js 檔案。

    vim https_server_test.js

    按i鍵進入編輯模式,並將以下內容添加至https_server_test.js檔案中。

    // 啟動https服務需要https包
    // 讀取檔案需要fs包
    const https = require('https');
    const fs = require('fs');
    
    // 將兩個認證檔案讀取放到options對象中
    // 使用readFileSync()方法,順序地執行讀檔案和啟動服務作業
    const options = {
        key: fs.readFileSync('/etc/ssl/cert/ssl.key'),  // 需替換為實際上傳私密金鑰檔案的絕對路徑。
        cert: fs.readFileSync('/etc/ssl/cert/ssl.pem')  // 需替換為實際上傳SSL認證檔案的絕對路徑。
    };
    
    // 建立伺服器,啟動伺服器,設定監聽連接埠號碼
    https.createServer(options, (req, res) => {
        res.end('hello world\n');
    }).listen(443);
    重要

    認證檔案的路徑需要配置正確,否則認證配置失敗,無法使用HTTPS訪問。

  6. 按 Esc 鍵退出編輯模式,輸入 :wq 後按 Enter 鍵,儲存並退出檔案。

  7. 執行以下命令,使SSL認證生效。

    sudo node https_server_test.js

步驟三:驗證 SSL認證是否安裝成功

  1. 請通過 HTTPS 訪問您已綁定認證的網域名稱(如 https://example.com,example.com 需替換為實際網域名稱)。

  2. 若瀏覽器地址欄顯示安全鎖表徵圖,說明認證已成功部署。如訪問異常或未顯示安全鎖,請先清除瀏覽器緩衝或使用無痕(隱私)模式重試。

    image

    Chrome 瀏覽器自 117 版本起,地址欄中的image已被新的image替代,需單擊該表徵圖後查看安全鎖資訊。

說明

如仍有問題,請參考常見問題進行排查。

常見問題

安裝或更新認證後,認證未生效或 HTTPS 無法訪問

常見原因如下:

  • 伺服器安全性群組或防火牆未開放 443 連接埠。請參見開放安全性群組和防火牆的 443 連接埠。

  • 認證的綁定網域名稱未包含當前訪問的網域名稱。請參見操作步驟。

  • 修改專案檔後,未重啟Node.js服務。具體操作可參見重啟Node.js服務。

  • 認證檔案未正確替換,或 Node.js 配置未正確指定憑證路徑。請檢查認證檔案是否為最新且有效。

  • 網域名稱已接入 CDN、SLB 或 WAF 等雲產品,但未在相應產品中安裝認證。請參閱流量經過多個雲產品時認證的部署位置完成相關操作。

  • 當前網域名稱的 DNS 解析指向多台伺服器,但認證僅在部分伺服器上安裝。需分別在每個伺服器中安裝認證。

如何更新(替換)Node.js 中已安裝的 SSL 憑證

請先備份伺服器上原有的認證檔案(.pem 和 .key),然後登入數位憑證管理服務控制台,下載新的認證檔案(.pem 和 .key),並上傳到目標伺服器覆蓋原有檔案(確保路徑和檔案名稱一致)。最後,重啟Node.js服務,使新認證生效。