HTTPS 與 TLS 的實際運作原理:實用指南
您在瀏覽器中輸入 https:// 並看到一個鎖頭圖示,但背後實際發生了什麼事?許多開發者把 HTTPS 當成一個待辦事項——啟用後就忘了它。然而,了解 HTTPS 與 TLS 的實際運作原理,對於除錯連線問題、最佳化效能以及建置安全的應用程式至關重要。本指南將透過實用範例,帶您了解 TLS 握手、憑證驗證與加密層,讓您能自信地回答「為什麼我的網站很慢?」或「那個憑證錯誤是什麼意思?」等問題。
HTTPS 到底是什麼
HTTPS 其實就是將 HTTP layered 在 TLS(Transport Layer Security,傳輸層安全性)之上。TLS 提供三項保證:
- 機密性:資料經過加密,竊聽者無法讀取。
- 完整性:資料在傳輸過程中若被竄改,將會被偵測到。
- 認證:您正在與真實的伺服器通訊,而非冒充者。
沒有 TLS 的 HTTP 會以明文傳送所有內容——密碼、Cookie 和個人資料對網路上的任何人都一覽無遺。TLS 將 HTTP 訊息包裹在加密隧道中,讓第三方無法讀取。
TLS 握手:逐步解析
在任何 HTTP 資料流動之前,客戶端與伺服器會執行握手,以協商加密參數並驗證身分。以下是典型的 TLS 1.2 握手過程(TLS 1.3 簡化了此流程,我們稍後會說明):
- Client Hello:客戶端傳送支援的加密套件清單、TLS 版本以及一個隨機值。
- Server Hello:伺服器選擇一個加密套件和 TLS 版本,並傳送自己的隨機值。
- 憑證:伺服器傳送其 TLS 憑證(以及任何中繼憑證)以證明其身分。
- 金鑰交換:客戶端使用憑證中的公鑰加密預主密鑰(pre-master secret)並傳送給伺服器。雙方衍生出相同的會話金鑰。
- Finished:雙方傳送握手過程的 MAC 以驗證完整性,隨後開始加密通訊。
在 TLS 1.3 中,握手流程更為精簡:客戶端在第一則訊息中就傳送金鑰共享(key share),伺服器則以自己的金鑰共享和憑證回應,將往返次數減少到僅一次。這顯著加快了連線建立的速度。
憑證與信任鏈
TLS 憑證將公鑰綁定到網域名稱,並由憑證授權單位(CA)簽署。瀏覽器信任一組預先安裝在作業系統或瀏覽器中的根 CA。當伺服器呈現其憑證時,瀏覽器會驗證:
- 憑證是否由受信任的 CA 簽署(直接或透過中繼 CA)。
- 網域名稱是否與您造訪的網站相符。
- 憑證是否在有效期限內。
- 憑證是否未被撤銷(透過 OCSP 或 CRL)。
如果任何一項檢查失敗,您就會看到警告。像 Let's Encrypt 這樣的現代工具讓取得免費、自動化的憑證變得容易,因此沒有理由不使用 HTTPS。
TLS 中的對稱與非對稱加密
TLS 巧妙地結合了兩種加密類型:
- 非對稱(公鑰)加密用於握手期間,以安全地交換共享密鑰。它的運算成本較高,但解決了金鑰分發的問題。
- 對稱加密(例如 AES)使用該共享密鑰來加密實際資料。對於大量資料來說,它快速且有效率。
這種混合方法讓您同時擁有公鑰加密的安全性和對稱加密的效能。
實用範例:檢視 TLS 連線
您可以使用 openssl 來觀察握手的實際運作。在終端機中執行以下指令:
openssl s_client -connect example.com:443 -tls1_3
輸出會顯示加密套件、憑證鏈和會話詳細資訊。尋找像 Protocol : TLSv1.3 和 Cipher : TLS_AES_256_GCM_SHA384 這樣的行。這對於除錯客戶端無法連線的原因非常有價值——也許是客戶端不支援伺服器的加密套件或 TLS 版本。
常見的 TLS 陷阱與避免方法
- 憑證過期:設定監控與自動續約(例如使用 Certbot)。
- 混合內容:在 HTTPS 頁面載入 HTTP 資源會破壞鎖頭圖示。使用相對 URL 或全面採用 HTTPS。
- 弱加密套件:停用過時的協定(SSLv3、TLS 1.0/1.1)和弱加密演算法(RC4、3DES)。使用 SSL Labs 等工具測試您的設定。
- 缺少中繼憑證:某些客戶端需要完整的憑證鏈。請務必在伺服器設定中包含中繼憑證。
若要快速檢查,請將您的網站提交到線上 TLS 測試工具,或使用 openssl s_client -connect yourdomain.com:443 -showcerts 來檢視憑證鏈。
TLS 1.3:新功能與重要性
TLS 1.3(RFC 8446)帶來了重大改進:
- 更快的握手:1-RTT(或恢復會話的 0-RTT)降低了延遲。
- 更強的安全性:移除了舊版演算法,並強制要求前向保密。
- 簡化的設定:可選擇的加密套件更少。
大多數現代瀏覽器和伺服器都支援 TLS 1.3。啟用它可同時提升效能與安全性。
常見問題
TLS 和 SSL 有什麼不同?
SSL(Secure Sockets Layer)是 TLS 的前身。SSL 2.0 和 3.0 版本因安全漏洞而遭棄用。TLS 是現代且安全的協定,儘管人們仍習慣說「SSL 憑證」。
HTTPS 如何影響 SEO 和效能?
像 Google 這樣的搜尋引擎會將 HTTPS 作為排名訊號。在效能方面,TLS 在握手期間會增加少量額外開銷,但透過 TLS 1.3 和會話恢復,影響微乎其微。使用 HTTP/2 或 HTTP/3(需要 HTTPS)實際上可以提升速度。
沒有憑證可以使用 HTTPS 嗎?
不行。需要憑證來證明伺服器身分並啟用加密。您可以從 Let's Encrypt 取得免費憑證,或使用自簽憑證進行內部測試,但瀏覽器會對自簽憑證向使用者發出警告。
準備好測試您的 HTTPS 設定了嗎?使用我們的 Nginx 日誌分析器 來監控 TLS 握手錯誤並最佳化您的伺服器設定。