https成長史

基礎名詞

  先說一下基礎名詞,對稱加密、非對稱加密

  對稱加密:加密、解密使用同一副祕鑰的加密算法,比如DES

  非對稱加密:加密、解密使用不同祕鑰,加密使用公鑰,則解密須使用私鑰;反之亦然。比如RSA

https 對稱加密

https使用對稱加密,流程

  1. 瀏覽器請求服務器,服務器返回祕鑰key
  2. 瀏覽器得到祕鑰key
  3. 瀏覽器使用祕鑰key加密html,傳輸給服務器
  4. 服務器使用祕鑰key解密

存在的問題

  會出現祕鑰泄露問題:如果有不懷好意的人,在步驟1和步驟2之間,攔截了祕鑰key,那整個會話的內容對他來說都是明文了

https非對稱加密

https使用非對稱加密,流程

  1. 瀏覽器請求服務器,服務器返回公鑰k1(服務器公鑰k1,私鑰k2)
  2. 瀏覽器得到祕鑰k1
  3. 瀏覽器使用祕鑰k1加密html,傳輸給服務器
  4. 服務器使用祕鑰k2解密

沒有直接解決祕鑰泄露問題,但是解決了祕鑰泄露所引發的問題。即使在步驟1和步驟2之間被人攔截了,他只有公鑰k1,對於加密後的html密文,無法進行解密,保證了數據傳輸的安全性。

存在的問題

非對稱加密的方式,又引出了新的問題–非對稱加密效率比較低,特別是在對大文本的加密上,非對稱加密的效率更低。 顯然我們是不能忍受瀏覽器發請求出去了,很久才響應的

https對稱+非對稱加密

https使用對稱加密+非對稱加密,流程

  1. 瀏覽器請求服務器,服務器返回公鑰k1(服務器公鑰k1,私鑰k2)

  2. 瀏覽器得到祕鑰k1

  3. 瀏覽器生成對稱加密的祕鑰k3

  4. 瀏覽器用k1加密k3,得到密文x,把x傳輸給服務器

  5. 服務器用k2解析x,得到對稱加密的祕鑰k3

  6. 瀏覽器使用祕鑰k3加密html,傳輸給服務器
  7. 服務器使用祕鑰k3解密

https對稱+非對稱 解決了祕鑰泄露問題、非對稱加密效率低下問題,實際上現在很多網站的https就是使用的這一版本。

存在的問題

看似是無懈可擊,然而,還是不完美的–會出現公鑰被篡改的問題

假如,在步驟1和步驟2之間,被不懷好意的人攔截了,他獲取到祕鑰k1,保存下來,並生成一對新的祕鑰(公鑰k11,私鑰k22),把k11返回給瀏覽器  瀏覽器收到祕鑰k11,使用k11加密html,得到密文x,把x傳輸給服務器,  在傳輸的過程中,不懷好意的人再次攔截請求,得到x,因爲x是使用k11加密的,他有對應的私鑰k22,所以,他是能解析得到明文的  再得到明文後,他把明文用祕鑰k1加密,傳輸給服務器  服務器是正常解析的,瀏覽器和服務器是無法感知密文已經被泄露

這就是中間人攻擊,根本原因是瀏覽器無法確定接收到的公鑰,是否是被篡改的。

https數字證書,閃亮登場

數字證書原理

證書是如何防止被篡改的?證書如何證明本身的真實性呢? 先說下數字證書的構成:CA機構用私鑰加密 消息摘要 ,其中消息摘要=hash(公鑰k1+網站信息) 數字證書的驗證:

​ 在https3.0步驟2的基礎上,額外返回證書信息和CA的公鑰​ 使用CA公鑰解密,得到一串hash值,它是 hash(公鑰k1+網站信息)得來的​ 再使用https3.0步驟2返回的祕鑰k1和自己的網站信息,進行hash 比較hash得到的內容與使用CA公鑰解密後的內容,是否一致,若不一樣,則被篡改。

相關疑問

中間人能篡改證書嗎?

無法做到,因爲CA私鑰只有CA機構擁有,中間人無CA私鑰,所以無法對篡改內容進行簽名

中間人能掉包證書嗎?

無法做到,假如有網站B,想搞垮網站A,攔截了網站A的證書,把B自己的證書返回給A,只有網站A使用的就是B的公鑰了。這樣是行不通的,因爲證書裏,包含了網站信息,域名等,一對比就知道是否是掉包的了

如何保證CA公鑰可信性?

同理,CA機構的公鑰,也是可以使用數字證書的套路來證明的。

那麼最終,最底層是如何保證可信任性的呢?

操作系統、瀏覽器會預裝它們信任的根證書。從根證書開始,經過層層信任,形成信任鏈,CA證書獲得信任鏈的信任,那就能證明身份。

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