《圖解HTTP》讀書筆記五:確保 Web 安全的 HTTPS

衣舞晨風發表於2018-02-15

7.1 HTTP 的缺點

HTTP 主要有這些不足,例舉如下:

  • 通訊使用明文(不加密),內容可能會被竊聽
  • 不驗證通訊方的身份,因此有可能遭遇偽裝
  • 無法證明報文的完整性,所以有可能已遭篡改

     這些問題不僅在 HTTP 上出現,其他未加密的協議中也會存在這類問題。

7.2 HTTP+ 加密 + 認證 + 完整性保護=HTTPS

7.2.2 HTTPS 是身披 SSL 外殼的 HTTP

     HTTPS 並非是應用層的一種新協議。只是 HTTP 通訊介面部分用SSL(Secure Socket Layer)和 TLS(Transport Layer Security)協議代替而已。

     通常,HTTP 直接和 TCP 通訊。當使用 SSL 時,則演變成先和 SSL 通訊,再由 SSL 和 TCP 通訊了。簡言之,所謂 HTTPS,其實就是身披SSL 協議這層外殼的 HTTP。
這裡寫圖片描述
     在採用 SSL 後,HTTP 就擁有了 HTTPS 的加密、證書和完整性保護這些功能。

     SSL 是獨立於 HTTP 的協議,所以不光是 HTTP 協議,其他執行在應用層的 SMTP 和 Telnet 等協議均可配合 SSL 協議使用。可以說 SSL 是當今世界上應用最為廣泛的網路安全技術。

7.2.5 HTTPS 的安全通訊機制

     為了更好地理解 HTTPS,我們來觀察一下 HTTPS 的通訊步驟。
這裡寫圖片描述

步驟 1: 客戶端通過傳送 Client Hello 報文開始 SSL 通訊。報文中包含客戶端支援的 SSL 的指定版本、加密元件(Cipher Suite)列表(所使用的加密演算法及金鑰長度等)。

步驟 2: 伺服器可進行 SSL 通訊時,會以 Server Hello 報文作為應答。和客戶端一樣,在報文中包含 SSL 版本以及加密元件。伺服器的加密元件內容是從接收到的客戶端加密元件內篩選出來的。

步驟 3: 之後伺服器傳送 Certificate 報文。報文中包含公開金鑰證書。

步驟 4: 最後伺服器傳送 Server Hello Done 報文通知客戶端,最初階段的 SSL 握手協商部分結束。

步驟 5: SSL 第一次握手結束之後,客戶端以 Client Key Exchange 報文作為迴應。報文中包含通訊加密中使用的一種被稱為 Pre-master secret 的隨機密碼串。該報文已用步驟 3 中的公開金鑰進行加密。

步驟 6: 接著客戶端繼續傳送 Change Cipher Spec 報文。該報文會提示伺服器,在此報文之後的通訊會採用 Pre-master secret 金鑰加密。

步驟 7: 客戶端傳送 Finished 報文。該報文包含連線至今全部報文的整體校驗值。這次握手協商是否能夠成功,要以伺服器是否能夠正確解密該報文作為判定標準。

步驟 8: 伺服器同樣傳送 Change Cipher Spec 報文。

步驟 9: 伺服器同樣傳送 Finished 報文。

步驟 10: 伺服器和客戶端的 Finished 報文交換完畢之後,SSL 連線就算建立完成。當然,通訊會受到 SSL 的保護。從此處開始進行應用層協議的通訊,即傳送 HTTP 請求。

步驟 11: 應用層協議通訊,即傳送 HTTP 響應。

步驟 12: 最後由客戶端斷開連線。斷開連線時,傳送 close_notify 報文。上圖做了一些省略,這步之後再傳送 TCP FIN 報文來關閉與 TCP的通訊。

     在以上流程中,應用層傳送資料時會附加一種叫做 MAC(Message Authentication Code)的報文摘要。MAC 能夠查知報文是否遭到篡改,從而保護報文的完整性。

     下面是對整個流程的圖解。圖中說明了從僅使用伺服器端的公開金鑰證書(伺服器證書)建立 HTTPS 通訊的整個過程。
這裡寫圖片描述

CBC 模式(Cipher Block Chaining)又名密碼分組連結模式。在此模式下,將前一個明文塊加密處理後和下一個明文塊做 XOR 運算,使之重疊,然後再對運算結果做加密處理。對第一個明文塊做加密時,要麼使用前一段密文的最後一塊,要麼利用外部生成的初始向量(initial vector,IV)。

SSL 和 TLS

     HTTPS 使用 SSL(Secure Socket Layer) 和 TLS(Transport Layer Security)這兩個協議。

     SSL 技術最初是由瀏覽器開發商網景通訊公司率先倡導的,開發過 SSL3.0 之前的版本。目前主導權已轉移到 IETF(Internet Engineering Task Force,Internet 工程任務組)的手中。

     IETF 以 SSL3.0 為基準,後又制定了 TLS1.0、TLS1.1 和TLS1.2。TSL 是以 SSL 為原型開發的協議,有時會統一稱該協議為 SSL。當前主流的版本是 SSL3.0 和 TLS1.0。

     由於 SSL1.0 協議在設計之初被發現出了問題,就沒有實際投入使用。SSL2.0 也被發現存在問題,所以很多瀏覽器直接廢除了該協議版本。

《圖解HTTP》下載地址:
http://download.csdn.net/download/xunzaosiyecao/10252084
個人微信公眾號:
這裡寫圖片描述

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章