天天看點

白話https

摘錄:

Https涉及到的主體

  1. 用戶端。通常是浏覽器(Chrome、IE、FireFox等),也可以自己編寫的各種語言的用戶端程式。
  2. 服務端。一般指支援Https的網站,比如github、支付寶。
  3. CA(Certificate Authorities)機構。Https證書簽發和管理機構,比如Symantec、Comodo、GoDaddy、GlobalSign。

下圖裡我畫出了這幾個角色:

白話https

發明Https的動機

  1. 認證正在通路的網站。什麼叫認證網站?比如你正在通路支付寶,怎樣确定你正在通路的是阿裡巴巴提供的支付寶而不是假冒僞劣的釣魚網站呢?(DNS劫持)
  2. 保證所傳輸資料的私密性和完整性。衆所周知,Http是明文傳輸的,是以處在同一網絡中的其它使用者可以通過網絡抓包來竊取和篡改資料包的内容,甚至營運商或者wifi提供者,有可能會篡改http封包,添加廣告等資訊以達到盈利的目的。

Https的工作流程

這一節通過介紹Https協定的工作流程,來說明Https是如何達成自己的兩個目的的。下圖我畫出了Https的工作流程,注意,這隻是原理示意圖,并不是詳細的協定解析。

白話https

可以看到工作流程,基本分為三個階段:

1.認證伺服器。浏覽器内置一個受信任的CA機構清單,并儲存了這些CA機構的證書。第一階段伺服器會提供經CA機構認證頒發的伺服器證書,如果認證該伺服器證書的CA機構,存在于浏覽器的受信任CA機構清單中,并且伺服器證書中的資訊與目前正在通路的網站(域名等)一緻,那麼浏覽器就認為服務端是可信的,并從伺服器證書中取得伺服器公鑰,用于後續流程。否則,浏覽器将提示使用者,根據使用者的選擇,決定是否繼續。當然,我們可以管理這個受信任CA機構清單,添加我們想要信任的CA機構,或者移除我們不信任的CA機構。

2.協商會話密鑰。用戶端在認證完伺服器,獲得伺服器的公鑰之後,利用該公鑰與伺服器進行加密通信,協商出兩個會話密鑰,分别是用于加密用戶端往服務端發送資料的用戶端會話密鑰,用于加密服務端往用戶端發送資料的服務端會話密鑰。在已有伺服器公鑰,可以加密通訊的前提下,還要協商兩個對稱密鑰的原因,是因為非對稱加密相對複雜度更高,在資料傳輸過程中,使用對稱加密,可以節省計算資源。另外,會話密鑰是随機生成,每次協商都會有不一樣的結果,是以安全性也比較高。

3.加密通訊。此時用戶端伺服器雙方都有了本次通訊的會話密鑰,之後傳輸的所有Http資料,都通過會話密鑰加密。這樣網路上的其它使用者,将很難竊取和篡改用戶端和服務端之間傳輸的資料,進而保證了資料的私密性和完整性。

使用Https的流程

總結

  1. 說是讨論Https,事實上Https就是Http跑在SSl或者TLS上,是以本文讨論的原理和流程其實是SSL和TLS的流程,對于其它使用SSL或者TLS的應用層協定,本文内容一樣有效。
  2. 本文隻讨論了用戶端驗證服務端,服務端也可以給用戶端頒發證書并驗證用戶端,做雙向驗證,但應用沒有那麼廣泛,原理類似。
  3. 由于采用了加密通訊,Https無疑要比Http更耗費伺服器資源,這也是很多公司明明支援Https卻預設提供Http的原因。
上一篇: Nginx https
下一篇: 配置https

繼續閱讀