Https工作原理&TLS握手機制

WongKyunban發表於2020-12-10

Https工作原理&TLS握手機制

@Kyunban Wong


HTTPS是在HTTP的基礎上提供了資料加密的支援,儲存了資料的私密性、完整性,並且可以用來認證客戶端和服務端的身份。

在普通的HTTP中,資料是明文傳輸的,很容易出現中間人偽裝資料,面對客戶端偽裝成服務端,面對服務端偽裝成客戶端,進行竊取資料。

在這裡插入圖片描述

在HTTPS中則使用了**非對稱公鑰機制,**對資料進行了加密,又能驗證對方身份,基本避免中間人攻擊。

在這裡插入圖片描述

HTTPS的加密是通過TLS(Transport Layer Security)安全傳輸層協議來實現的。在客戶端和服務端正常通訊之前,會有一個握手過程(這個握手過程會根據Key交換演算法的不同而不同,如RSA,Diffie Hellman,以下的講解以RSA為例,由伺服器提供單向認證(也就是存在雙向認證的)):

在這裡插入圖片描述

  1. 首先,瀏覽器發起ClientHello訊息,訊息中包括:TLS版本、加密演算法集、隨機數(客戶諯產生);
  2. 接著,伺服器響應一個ServerHello訊息,訊息中包括:TLS版本、加密演算法集、隨機數(伺服器產生);
  3. 再接著,伺服器繼續傳送一個Certificate訊息,附加伺服器的證書;
  4. 最後,伺服器傳送一個ServerHelloDone訊息;
  5. 瀏覽器在收到伺服器發來的證書後,驗證是否是受信任的機構簽發的,是否是真實的伺服器;
  6. 認證伺服器的身份後,瀏覽器使用證書中附帶的公鑰生成premaster secret作為ClientKeyExchange,並使用公鑰加密生成的premaster secret傳給伺服器;
  7. 伺服器接著使用私鑰解密得到premaster secret;
  8. 然後,瀏覽器和伺服器使用premaster secret和之前收到的對方的隨機數生成相同的master key,用於加密和解密後續所有的通訊;
  9. 接著,瀏覽器向伺服器傳送ChangeCipherSpec訊息,然後傳送用master key加密的Finished訊息;
  10. 伺服器接收並驗證,接著伺服器向瀏覽器傳送ChangeCipherSpec訊息,然後傳送用master key加密的Finished訊息;
  11. 瀏覽器接收並驗證。至此TLS握手完成。

相關文章