HTTPS相關總結(內有SSL四次握手連接的詳細過程)

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

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

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

 

混合加密機制

HTTPS 採用共享密鑰加密和公開密鑰加密兩者並用的混合加密機制。 若密鑰能夠實現安全交換, 那麼有可能會考慮僅使用公開密鑰加密來通信。 但是公開密鑰加密與共享密鑰加密相比, 其處理速度要慢。

所以應充分利用兩者各自的優勢, 將多種方法組合起來用於通信:在交換密鑰環節使用公開密鑰加密方式, 之後的建立通信交換報文階段則使用共享密鑰加密方式。

詳細流程可以看下郭神的這篇博客: blog.csdn.net/guolin_blog/article/details/104546558

 

通信過程 (包含SSL的四次握手)

先看一下HTTPS的通信步驟,如下圖:

1. SSL四次握手建立連接

一次握手:

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

二次握手:

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

步驟 3: 之後服務器發送 Certificate 報文。 報文中包含公開密鑰證書。

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

三次握手:

步驟 5: 客戶端以 Client Key Exchange 報文作爲迴應。 報文中包含通信加密中使用的一種被稱爲 Pre-mastersecret 的隨機密碼串。 該報文已用步驟 3 中的公開密鑰進行加密。

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

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

四次握手:

步驟 8: 服務器同樣發送 Change Cipher Spec 報文。

步驟 9: 服務器同樣發送 Finished 報文。

總的來說,SSL會話的建立完成了以下幾個工作:

交換協議版本號,選擇一個通信雙方都支持的加密方式;對兩端實現身份驗證;密鑰交換。

2. SSL連接完成後,建立TCP連接,發送HTTP請求

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

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

3. 通信完成後斷開連接

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

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

 

SSL會變慢嗎?

通過上面的SSL四次握手我們可以知道,答案是肯定的,SSL的慢分兩種:

1. 通信慢

和使用 HTTP 相比, 網絡負載可能會變慢 2 到 100 倍。 除去和TCP 連接、 發送 HTTP 請求 • 響應以外, 還必須進行 SSL通信,因此整體上處理通信量不可避免會增加;

2. 處理速度慢

由於SSL必須進行加密處理,要大量消耗CPU 及內存等資源, 導致處理速度變慢。在服務器和客戶端都需要進行加密和解密的運算處理。 因此從結果上講, 比起 HTTP 會更多地消耗服務器和客戶端的硬件資源, 導致負載增強。

 

HTTPS 安全又可靠, 爲何不一直使用?

1. 與純文本通信相比, 加密通信會消耗更多的CPU 及內存資源

如果每次通信都加密, 會消耗相當多的資源, 平攤到一臺計算機上時, 能夠處理的請求數量必定也會隨之減少。因此, 如果是非敏感信息則使用 HTTP 通信, 只有在包含個人信息等敏感數據時, 才利用 HTTPS 加密通信。特別是每當那些訪問量較多的 Web 網站在進行加密處理時, 它們所承擔着的負載不容小覷。 在進行加密處理時, 並非對所有內容都進行加密處理, 而是僅在那些需要信息隱藏時纔會加密, 以節約資源。

2. 節約購買證書的開銷

要進行 HTTPS 通信, 證書是必不可少的。 而使用的證書必須向認證機構(CA) 購買。 那些購買證書並不合算的服務以及一些個人網站,可能只會選擇採用 HTTP 的通信方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章