# HTTPS 是如何建立安全連線的?(以鎖與鑰匙為比喻) ## 情境:瀏覽器要與銀行伺服器安全傳輸資料 --- ### 第一步:瀏覽器發出請求,告知支援的加密方式 瀏覽器向伺服器發送「Client Hello」訊息,內容包含: - 支援的加密演算法清單(例如:TLS_AES_128_GCM_SHA256) - 一組隨機數(Client Random) - 支援的 TLS 版本等資訊 --- ### 第二步:伺服器回應,提供選定的加密方式、公鑰與數位憑證 伺服器回傳「Server Hello」訊息,內容包含: - 選定的加密演算法 - 數位憑證(包含伺服器的公鑰) - 一組伺服器產生的隨機數(Server Random) --- ### 第三步:瀏覽器驗證伺服器憑證的真實性與有效性 瀏覽器會對伺服器提供的數位憑證進行以下檢查: #### 第三方驗證機制(由瀏覽器自動執行) 瀏覽器會根據內建的「信任憑證機構清單(Trusted CA List)」進行驗證: 1. **驗證簽章:** - 憑證是否由受信任的第三方憑證機構(CA)簽發? - 例如:Let's Encrypt、DigiCert、GlobalSign 等 2. **驗證有效性:** - 憑證是否在有效期間內(未過期或未吊銷)? 3. **驗證網域:** - 憑證中的網域名稱是否與當前連線的網站網域一致? 若上述檢查皆通過,則此連線可視為安全,瀏覽器將繼續進行加密協商。 --- ### 第四步:瀏覽器產生對稱加密金鑰,並使用伺服器公鑰加密後傳送 瀏覽器產生一組「對稱加密金鑰」(通常稱為 Pre-Master Secret),並使用伺服器的公鑰將其加密後送出。這個步驟稱為金鑰交換(Key Exchange)。 伺服器接收後,使用其對應的私鑰進行解密,取得相同的金鑰。 --- ### 第五步:瀏覽器與伺服器完成握手後,開始使用對稱加密進行資料傳輸 瀏覽器與伺服器會根據: - Client Random - Server Random - Pre-Master Secret 共同計算出一組 Session Key(對稱加密密鑰),後續資料傳輸均使用此密鑰加密與解密。 --- ## 資料傳輸階段的加密方式 | 階段 | 加密方式 | 使用金鑰 | 特性 | |------------------|--------------|------------------|------------------| | TLS 握手階段 | 非對稱加密 | 公鑰 / 私鑰 | 安全但效率較低 | | 資料傳輸階段 | 對稱加密 | Session Key | 加解密速度快,適合大量資料 | --- ### 資料傳輸過程中對稱加密的實際應用 建立 Session Key 後,瀏覽器與伺服器之間的所有 HTTP 資料(請求與回應)都會經過對稱加密處理,流程如下: 1. **瀏覽器發送資料:** - 將 HTTP 請求內容(如登入表單、API 呼叫等)使用 Session Key 加密 - 傳送加密後的資料給伺服器 2. **伺服器接收資料:** - 使用相同的 Session Key 解密該資料,取得原始請求內容 3. **伺服器回傳資料:** - 將 HTTP 回應(如使用者資訊、查詢結果等)同樣使用 Session Key 加密 - 傳送回瀏覽器 4. **瀏覽器接收回應:** - 使用 Session Key 解密回應資料並呈現給使用者 由於 Session Key 只有瀏覽器與伺服器雙方知道,即便中間有第三者攔截資料,也無法解密內容,確保機密性與傳輸完整性。 --- ## 補充:如何在瀏覽器檢查 HTTPS 憑證資訊(以 Chrome 為例) 1. 開啟任意 HTTPS 網站(如 https://example.com) 2. 點選網址列左側的 🔒 鎖頭圖示 3. 點選「連線安全性」>「憑證有效」 4. 可檢查以下資訊: - 憑證發行者(CA) - 有效期間 - 憑證中綁定的網域(Subject Alternative Names) --- ## 總結 - HTTPS 的安全性依賴「非對稱加密」進行金鑰交換、「對稱加密」進行資料傳輸 - 第三方憑證機構(CA)負責驗證伺服器身份 - 瀏覽器會自動完成憑證驗證與 Session Key 協商流程 - 資料在傳輸過程中全程加密,可防止竊聽與竄改 ###### `HTTPS`