HTTPS 與 TLS 的實際運作原理:實用指南
您可能看過瀏覽器中的鎖頭圖示,知道它代表「安全」。但當您造訪 HTTPS 網站時,實際發生了什麼事?您的瀏覽器與伺服器如何在不被竊聽的情況下協商出加密金鑰?如果您是開發人員,了解 TLS 對於除錯連線問題、設定伺服器以及建置安全的應用程式至關重要。
本指南以實用角度拆解 HTTPS 與 TLS。我們將涵蓋握手過程、憑證、加密,並提供可執行的步驟來保護您自己的網站。
什麼是 TLS?它與 HTTPS 有何關係?
TLS(Transport Layer Security,傳輸層安全性)是一種加密協定,可在網路上提供安全的通訊。HTTPS 只是將 HTTP 疊加在 TLS 之上。當您看到 https://,表示 HTTP 流量使用 TLS 加密。
TLS 確保三件事:
- 機密性:資料經過加密,竊聽者無法讀取。
- 完整性:資料在傳輸過程中若被修改,將可被偵測。
- 身分驗證:伺服器透過憑證證明其身分。
沒有 TLS,您傳送的任何資料(密碼、信用卡號、訊息)都會以明文傳輸,可能被攔截。
TLS 握手:逐步解析
在交換任何加密資料之前,用戶端與伺服器會執行握手,以協商加密演算法並建立共用金鑰。以下是 TLS 1.3(現代標準)握手的簡化版本:
- Client Hello:用戶端傳送支援的加密套件清單、隨機值及其他參數。
- Server Hello:伺服器選擇一個加密套件,傳送自己的隨機值,並提供其憑證。
- 金鑰交換:用戶端與伺服器使用憑證中的公開金鑰,推導出共用密鑰(使用 Diffie-Hellman)。
- Finished:雙方驗證握手,並開始加密應用程式資料。
在 TLS 1.3 中,此過程僅需一個往返,比舊版本更快。
為何憑證很重要
憑證是由憑證授權單位(CA)簽發的數位身分證。它們包含伺服器的公開金鑰,並由 CA 簽署以證明真偽。當您的瀏覽器連線時,會檢查:
- 憑證是否由受信任的 CA 簽署?
- 網域名稱是否相符?
- 憑證是否過期或已撤銷?
若任一檢查失敗,您會看到警告。自簽憑證適合測試,但不適用於生產環境。
TLS 中的加密:對稱與非對稱
TLS 同時使用非對稱與對稱加密:
- 非對稱加密(例如 RSA、ECDSA)用於握手期間安全地交換金鑰。速度較慢,但解決了金鑰分配的問題。
- 對稱加密(例如 AES、ChaCha20)用於握手後的大量資料加密。速度快且有效率。
現代 TLS 1.3 使用臨時 Diffie-Hellman 進行金鑰交換,提供前向保密:即使伺服器的私密金鑰日後外洩,過去的連線工作階段仍保持安全。
在您的網站上實作 HTTPS 的實用步驟
準備好保護您的網站了嗎?請依照下列步驟:
- 取得憑證:使用 Let's Encrypt(免費)或商業 CA。
- 在您的網頁伺服器上安裝憑證(Nginx、Apache 等)。
- 設定您的伺服器使用強式協定與加密套件。停用 TLS 1.0/1.1 與 SSLv3。
- 將 HTTP 重新導向至 HTTPS,使用 301 重新導向。
- 啟用 HSTS(HTTP Strict Transport Security,HTTP 嚴格傳輸安全性),強制瀏覽器使用 HTTPS。
- 測試您的設定,使用 SSL Labs 的 SSL Test 等工具。
以下是 HTTPS 的 Nginx 設定範例片段:
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers off;
add_header Strict-Transport-Security "max-age=63072000" always;
location / {
root /var/www/html;
index index.html;
}
}
請記得自動續訂憑證(例如使用 Certbot)。
常見的 TLS 陷阱與避免方法
- 憑證過期:設定自動續訂與監控。
- 混合內容:確保所有資源(圖片、指令碼)都透過 HTTPS 載入。
- 弱式加密套件:僅使用強式加密套件;停用 RC4、DES 等。
- 缺少中繼憑證:在伺服器設定中包含完整的憑證鏈。
- 未啟用 HSTS:沒有 HSTS,使用者可能被降級至 HTTP。
常見問題
TLS 與 SSL 有何不同?
SSL 是 TLS 的前身。由於安全漏洞,SSL 版本已被棄用。當人們說「SSL 憑證」時,通常指的是 TLS 憑證。請一律使用 TLS 1.2 或 1.3。
HTTPS 會影響效能嗎?
現代 TLS 增加的延遲極小(TLS 1.3 中僅一個往返)。透過工作階段恢復與 HTTP/2,額外開銷微乎其微。事實上,HTTPS 可啟用更快的協定,如 HTTP/2 與 Brotli 壓縮。
我可以使用沒有 CA 簽發的憑證來啟用 HTTPS 嗎?
您可以使用自簽憑證,但瀏覽器會顯示警告。對於公開網站,請一律使用受信任 CA 簽發的憑證。Let's Encrypt 提供受所有主流瀏覽器信任的免費憑證。
需要快速檢查您網站的安全標頭或產生安全的設定嗎?試試我們的 Nginx 日誌分析器,檢查流量並確保您的 HTTPS 設定正常運作。