HTTPS 與 TLS 的實際運作原理:實用指南

Security2026-11-03TryQuickToolBox

你大概看過瀏覽器裡的鎖頭圖示,並假設這代表網站是安全的。但當你造訪一個 HTTPS 網址時,實際發生了什麼事?為什麼有些憑證會觸發警告?你又怎麼知道連線是否真的端到端加密?本指南以實用角度拆解 HTTPS 和 TLS,說明握手步驟、憑證如何驗證,以及如何使用命令列工具檢查真實連線。讀完後,你將足夠了解其運作機制,能夠除錯 TLS 問題,並為自己的網路安全做出明智決定。

HTTPS 究竟是什麼

HTTPS 是建立在 TLS(Transport Layer Security,傳輸層安全性)之上的 HTTP。TLS 提供三項保證:

沒有 TLS 時,HTTP 會以純文字在網路上傳送所有內容——密碼、Cookie 和內容。TLS 將這些流量包裝在加密通道中。鎖頭圖示表示連線已加密且憑證有效,但這並不表示該網站值得信賴或在其他方面安全(例如,它仍可能存在漏洞)。

白話解釋 TLS 握手

在任何 HTTP 資料交換之前,客戶端和伺服器會執行 TLS 握手。具體步驟在 TLS 1.2 和 1.3 之間略有不同,但核心概念相同:協商演算法、驗證伺服器,並建立共享金鑰。以下是 TLS 1.3(現代預設)的簡化流程:

  1. Client Hello:客戶端傳送支援的加密套件清單、一個隨機值和金鑰共享(用於金鑰交換)。
  2. Server Hello:伺服器選擇一個加密套件,傳送自己的隨機值和金鑰共享,並提供其憑證鏈。
  3. 憑證驗證:客戶端檢查憑證的有效性、網域名稱和信任鏈。
  4. 金鑰衍生:雙方使用 Diffie-Hellman(通常是 X25519)計算出相同的共享密鑰。並由此衍生對稱會話金鑰。
  5. Finished:雙方對握手記錄傳送 MAC,以確認沒有任何內容被竄改。

握手完成後,應用程式資料(HTTP 請求和回應)便使用會話金鑰加密。TLS 1.3 將握手減少到一個往返(1-RTT),並支援 0-RTT 恢復,使其比 TLS 1.2 更快。

憑證驗證:瀏覽器如何決定信任網站

當伺服器傳送其憑證時,客戶端必須進行驗證。瀏覽器(或你的 HTTP 客戶端)會執行幾項檢查:

如果任何檢查失敗,瀏覽器會顯示警告。例如,自簽憑證會觸發「你的連線不是私人連線」,因為它並非由受信任的 CA 簽署。

檢查真實的 TLS 連線

你可以使用 OpenSSL 自行查看握手詳細資訊。在終端機中執行此命令(替換主機名稱):

openssl s_client -connect example.com:443 -servername example.com -showcerts

輸出會包含憑證鏈、協商的加密套件和 TLS 版本。尋找類似以下的行:

New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit

這表示連線使用 TLS 1.3 和 AES-256-GCM。你也可以使用 curl -v https://example.com 查看 TLS 握手摘要。

常見的 TLS 設定錯誤及如何發現

即使啟用了 HTTPS,設定錯誤仍可能削弱安全性。以下是一些常見問題:

問題風險如何檢查
弱協定(TLS 1.0/1.1)易受已知攻擊openssl s_client -tls1_1 -connect host:443 應該失敗
憑證過期瀏覽器警告、信任中斷使用 openssl s_client | openssl x509 -noout -dates 檢查到期日
缺少中間憑證部分客戶端驗證失敗使用 -showcerts 並驗證鏈的完整性
沒有 HSTS 標頭可能遭受降級攻擊檢查是否有 Strict-Transport-Security 標頭

修復這些問題通常涉及更新伺服器設定(例如,在 Nginx 中:ssl_protocols TLSv1.2 TLSv1.3;)並確保你的憑證鏈完整。

實務中的 HTTPS:開發者該做什麼

如果你正在除錯伺服器日誌,Nginx 日誌分析器 可以幫助你從存取日誌中找出 TLS 握手失敗和憑證錯誤。

常見問題

TLS 和 SSL 有什麼區別?

SSL 是 TLS 的前身。SSL 2.0 和 3.0 已棄用且不安全;現代系統使用 TLS 1.2 或 1.3。人們口語上常說「SSL」,但他們指的是 TLS。

HTTPS 能讓網站完全安全嗎?

不能。HTTPS 加密流量並驗證伺服器,但它不能防止 SQL 注入、XSS 或權限設定錯誤等漏洞。它只是安全防護的一層。

如何檢查網站是否支援 TLS 1.3?

使用 openssl s_client -connect host:443 -tls1_3。如果握手成功,則支援 TLS 1.3。或者,在瀏覽器開發者工具的安全性標籤中檢查協定。

了解 TLS 握手和憑證驗證有助於你建置和維護安全的網路服務。當你需要分析伺服器日誌中的 TLS 錯誤或效能問題時,試試 Nginx 日誌分析器,快速解析和篩選日誌項目。