全部產品
Search
文件中心

Certificate Management Service:在Nginx伺服器部署SSL認證(Windows)

更新時間:Nov 19, 2025

通過未加密的HTTP協議傳輸資料,會面臨資訊泄露、內容篡改等安全風險,並可能被瀏覽器標記為“不安全”,影響使用者信任。在Windows伺服器的Nginx上部署SSL認證,可啟用HTTPS加密通訊,保障資料在傳輸過程中的機密性與完整性,提升網站的安全性和可信度。本文介紹如何在Windows系統上的Nginx伺服器部署SSL認證,以及安裝後HTTPS效果驗證等。

適用範圍

開始配置前,確保滿足以下條件:

  • 認證狀態:已擁有由權威機構簽發的 SSL 憑證。若認證即將到期或已到期,請先續約SSL認證。

  • 網域名稱匹配:確保認證能夠匹配所有需保護的網域名稱。如需添加或修改網域名稱,可根據需求購買正式認證追加和更換網域名稱

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

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

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

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

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

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

    說明

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

  • 伺服器許可權:需要使用 Administrator 賬戶或一個具有管理員權限的賬戶。

  • 網域名稱解析:網域名稱已配置解析記錄並解析至伺服器的公網 IP。

  • 環境依賴:本文以Widows Server 2025作業系統、Nginx-1.28.0為例介紹。本文中Nginx的樣本安裝目錄為D:\nginx-1.28.0

    說明

    不同版本的作業系統或Web伺服器,部署操作可能有所差異。

操作步驟

步驟一:準備SSL認證

  1. 進入SSL認證管理頁面,在目標認證操作列單擊更多進入認證詳情頁面,然後在下載頁簽中下載伺服器類型Nginx的認證。

  2. 解壓下載的認證壓縮包:

    • 若同時包含認證檔案(.pem)和私密金鑰檔案(.key),請妥善儲存上述檔案,後續部署時均需使用。

    • 若僅包含認證檔案(.pem),不含私密金鑰檔案(.key),需配合您本地儲存的私密金鑰檔案一起部署。

      說明

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

  3. 將解壓後的認證檔案和私密金鑰檔案上傳至伺服器,並存放在一個安全的外部目錄(本文樣本路徑為D:\cert)。

    說明

    以下操作以阿里雲 ECS 為例,其它類型的伺服器請參考其官方文檔。

    1. 訪問ECS控制台-執行個體。在頁面左側頂部,選擇目標資源所在的資源群組和地區。

    2. 進入目標執行個體詳情頁,單擊遠端連線,選擇通過Workbench遠端連線。根據頁面提示登入,進入伺服器案頭。

    3. 單擊伺服器左下角開始菜單,尋找並開啟名為此電腦電腦檔案總管的選項。

    4. 雙擊重新導向的驅動程式和檔案夾下的***上的workbench,從本地拖動認證檔案至該目錄,然後右鍵重新整理檔案夾。

      image

    5. 將目標檔案複製到D:\cert目錄。

      重要

      重新串連、退出執行個體時,Workbench會自動清除該執行個體重新導向的驅動程式和檔案夾中已上傳的所有檔案資訊以節省空間的,該目錄僅用於檔案傳輸,請不要儲存檔案。

步驟二:配置系統與網路環境

  1. 開放安全性群組的 443 連接埠。

    重要

    若您的伺服器部署在雲平台,請確保其安全性群組已開放入方向 443 連接埠 (TCP),否則外部無法訪問服務。以下操作以阿里雲 ECS 為例,其他雲平台請參考其官方文檔。

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

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

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

  2. 開放伺服器防火牆的443連接埠。

    1. 登入Windows伺服器,單擊左下角開始菜單,開啟控制台

    2. 點擊系統和安全 > Windows防火牆 > 檢查防火牆狀態

    3. 如果防火牆處於如下圖的關閉狀態,無需額外操作。image

    4. 如果防火牆已開啟,請參考以下步驟允許存取HTTPS規則。

      1. 單擊左側進階設定 > 入站規則,檢查是否存在協議為TCP,本地連接埠為443,操作阻止的入站規則。

      2. 若存在此類規則,需要按右鍵相應規則並選擇屬性,在常規頁簽,將其修改為允許串連應用

步驟三:在Nginx伺服器部署認證

  1. 開啟設定檔,在 Nginx 中配置 SSL 憑證和私密金鑰檔案(本文樣本路徑為D:\nginx-1.28.0\conf\nginx.conf)。

    1. 添加監聽 443 連接埠的 server 塊。

      將現有監聽 80 連接埠的 server 塊複製為新的配置塊,修改其監聽連接埠為 listen 443 ssl,並補充 SSL 憑證配置(包括 ssl_certificatessl_certificate_key 指令),其餘配置項維持不變。

      # 原有監聽 80 連接埠的 server 塊
      server {
          listen 80;
          server_name yourdomain.com www.yourdomain.com;
          
          # 其它配置
          location / {
              proxy_pass http://127.0.0.1:8000;
          }
      }
      
      # 複製已有監聽 80 連接埠的 server 塊,新增為一個新的 server 塊
      server {
          # 將原有 listen 80 修改為 listen 80 改為 listen 443 ssl
          listen 443 ssl;
          # 原有 server_name,可繼續新增更多當前認證支援的網域名稱
          server_name yourdomain.com www.yourdomain.com;
          
          # ======================= 認證配置開始 =======================
          # 指定認證檔案(中間認證可以拼接至該pem檔案中),請將以下路徑替換為您實際使用的認證檔案的絕對路徑
          ssl_certificate D:\\cert\\example.com.pem;
          # 指定私密金鑰文檔,請將以下路徑替換為您實際使用的私密金鑰檔案的絕對路徑
          ssl_certificate_key D:\\cert\\example.com.key;
          # 配置 SSL 會話緩衝,提高效能
          ssl_session_cache shared:SSL:1m;
          # 設定 SSL 會話逾時時間
          ssl_session_timeout 5m;
          # 自訂設定使用的TLS協議的類型以及加密套件(以下為配置樣本,請您自行評估是否需要配置)
          ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
          # 指定允許的 TLS 協議版本,TLS協議版本越高,HTTPS通訊的安全性越高,但是相較於低版本TLS協議,高版本TLS協議對瀏覽器的相容性較差
          ssl_protocols TLSv1.2 TLSv1.3;
          # 優先使用服務端指定的加密套件
          ssl_prefer_server_ciphers on;
          # ======================= 認證配置結束 =======================
         
          # 其它配置
      }
    2. 可選:設定HTTP請求自動跳轉到HTTPS。在原有監聽80連接埠的server寬中添加rewrite指令即可。

      server {
          listen 80;
          #填寫認證綁定的網域名稱
          server_name <YOURDOMAIN>;
          #將所有HTTP請求通過rewrite指令重新導向到HTTPS。
          rewrite ^(.*)$ https://$host$1;
          location / {
              index index.html index.htm;
          }
      }
    3. 執行以下命令驗證設定檔的修改是否合法。若輸出syntax is oktest is successful則表示測試通過,否則需根據提示修正配置,直至測試通過。

      .\nginx.exe -t
  2. 重載Nginx服務。

    開啟Windows命令列,進入Nginx安裝目錄,執行以下命令。

    .\nginx.exe -s reload 

步驟四:驗證部署結果

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

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

    image

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

說明

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

應用於生產環境

在生產環境部署時,遵循以下最佳實務可提升安全性、穩定性和可維護性:

  • 使用非管理員權限使用者運行

    為應用建立專用的、低許可權的系統使用者,切勿使用擁有管理員權限的賬戶運行應用。

    說明

    建議使用網關層配置 SSL的方案,即將認證部署在Server Load Balancer上,由其終結 HTTPS 流量,再將解密後的 HTTP 流量轉寄到後端應用。

  • 憑證外部化管理

    切勿將密碼等敏感資訊寫入程式碼在代碼或設定檔中。使用環境變數、Vault 或雲端服務商提供的Key Management Service來注入憑證。

  • 啟用 HTTP 到 HTTPS 強制跳轉

    確保所有通過 HTTP 訪問的流量都被自動重新導向到 HTTPS,防止中間人攻擊。

  • 配置現代 TLS 協議

    在伺服器配置中禁用老舊且不安全的協議(如 SSLv3, TLSv1.0, TLSv1.1),僅啟用 TLSv1.2 和 TLSv1.3。

  • 認證監控與自動續期

    建議在認證部署完成後,為網域名稱開啟網域名稱監控功能。阿里雲將自動檢測認證有效期間,並在認證到期前發送提醒,協助您及時續期,避免服務中斷。具體操作請參見購買並開啟公網網域名稱監控

常見問題

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

常見原因如下:

  • 伺服器安全性群組或防火牆未開放 443 連接埠。請參見配置系統與網路環境

  • 認證的綁定網域名稱未包含當前訪問的網域名稱。請參見網域名稱匹配

  • 修改 Nginx 設定檔後,未重載(reload) Nginx 服務。具體操作可參見重載 Nginx 服務

  • 認證檔案未正確替換,或 Nginx 配置未正確指定憑證路徑。請檢查 Nginx 設定檔和所用認證檔案是否為最新且有效。

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

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

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

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

如何在 Nginx 中關閉 TLSv1.0 和 TLSv1.1 以避免部分瀏覽器提示“認證不符合標準”

在 Nginx 監聽 443 連接埠的 server 塊中,將 ssl_protocols 僅保留 TLSv1.2 和 TLSv1.3,最終配置為ssl_protocols TLSv1.2 TLSv1.3;。此時將禁用不安全的 TLSv1.0 和 TLSv1.1。配置完成後,執行 .\nginx.exe -s reload 使設定生效。

執行 nginx -s reload 後,Nginx啟動失敗或日誌中出現 bind() to 0.0.0.0:443 failed 錯誤。

此為連接埠衝突問題。請使用 netstat -ano | findstr ":443" 命令確認443連接埠是否被佔用,並停止佔用該連接埠的服務。

網站可以通過HTTPS訪問,但瀏覽器地址欄沒有顯示安全鎖,或提示“混合內容”警告。

原因為網頁中載入了通過HTTP協議引用的資源(如圖片、CSS、JS檔案)。檢查網頁原始碼,將所有 http:// 連結修改為 https:// 或使用相對路徑(例如 /images/logo.png)。