HTTPS 與 TLS 真正如何運作:逐步指南

Security2026-10-23TryQuickToolBox

您可能已經在瀏覽器中看到鎖定圖示,並認為您的連線是安全的。但當您造訪 HTTPS 網站時,實際發生了什麼?您的瀏覽器如何知道它正在與真實的伺服器通訊,而不是冒充者?為什麼 TLS 有時會拖慢您的網站速度?

在本指南中,我們將逐步介紹握手過程,揭開 HTTPS 和 TLS 的神秘面紗。您將了解憑證、對稱與非對稱加密的作用,以及如何在您自己的專案中驗證和優化 TLS。

HTTPS 和 TLS 實際做什麼

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

沒有 TLS,HTTP 流量以明文傳送。網路路徑上的任何人(Wi-Fi 熱點、ISP、被入侵的路由器)都可以讀取或更改它。TLS 透過在交換任何 HTTP 資料之前建立安全通道來解決這個問題。

TLS 握手:逐步解析

握手是神奇之處。這是一個協商過程,建立共享金鑰並驗證身分。以下是 TLS 1.2 和 1.3(您今天會遇到的兩個版本)的簡化流程。

步驟 1:客戶端問候 (Client Hello)

客戶端(瀏覽器)發送一個 ClientHello 訊息,包含:

步驟 2:伺服器問候和憑證

伺服器回應一個 ServerHello(選擇的版本、加密套件、伺服器隨機數)及其憑證。憑證包含伺服器的公鑰,並由憑證授權單位 (CA) 簽署。

客戶端驗證憑證:是否過期?是否由受信任的 CA 簽發?網域是否匹配?如果沒有,瀏覽器會顯示警告。

步驟 3:金鑰交換

使用伺服器的公鑰(或 Diffie-Hellman 參數),客戶端和伺服器推導出共享的預主密鑰。在 TLS 1.3 中,這是使用臨時 Diffie-Hellman (ECDHE) 完成的,提供前向保密:即使伺服器的私鑰後來被洩露,過去的會話仍然安全。

步驟 4:完成

雙方發送一個使用新推導出的金鑰加密的 Finished 訊息。如果解密成功,握手完成。從那時起,所有應用程式資料(HTTP)都使用對稱加密(例如 AES-GCM 或 ChaCha20-Poly1305)加密。

TLS 1.3 的改進

TLS 1.3 將握手減少到一個往返 (1-RTT),並支援 0-RTT 恢復以服務重複訪客。它還移除了過時的演算法,使其更快、更安全。大多數現代瀏覽器和伺服器都支援 TLS 1.3。

TLS 中的對稱與非對稱加密

TLS 使用兩種類型的加密是有充分理由的:

這種混合方法為您提供了公鑰密碼學的安全性和對稱密碼的性能。

憑證:信任錨點

憑證將公鑰綁定到網域名稱,並由 CA 簽署。瀏覽器和作業系統附帶一個受信任根 CA 的存儲庫。當伺服器呈現其憑證時,客戶端會建立一條回到受信任根的信任鏈。

憑證的生命週期有限(現在通常為 90 天,使用 Let's Encrypt)。過期的憑證會導致瀏覽器錯誤,因此請自動化續訂。

實作:使用 OpenSSL 檢查 TLS

您可以使用 openssl 命令列工具檢查伺服器的 TLS 配置。這有助於除錯握手失敗或驗證加密套件。

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

這會連接到伺服器並列印憑證鏈、協商的加密和會話詳細資訊。尋找 Verify return code: 0 (ok) 以確認憑證有效。

檢查憑證到期時間:

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates

常見 TLS 陷阱及如何避免

優化 TLS 效能

TLS 因握手而增加延遲。以下是如何將其最小化:

常見問題

HTTPS 和 TLS 有什麼區別?

HTTPS 是 HTTP 的安全版本,而 TLS 是提供安全性的密碼學協定。HTTPS 使用 TLS 來加密和驗證連線。

TLS 如何提供前向保密?

前向保密確保即使伺服器的私鑰被洩露,過去的會話金鑰也無法被推導出來。這是透過在 TLS 1.3 和現代 TLS 1.2 配置中使用臨時 Diffie-Hellman 金鑰交換 (ECDHE) 來實現的。

為什麼我在某些網站上看到憑證錯誤?

憑證錯誤通常表示憑證已過期、自簽、為不同網域簽發,或憑證鏈不完整。瀏覽器拒絕此類憑證以保護您免受中間人攻擊。

當您需要檢查或除錯 TLS 連線時,Timestamp Converter 等工具可以幫助您解碼憑證有效期並除錯時間相關問題。