web基礎系列(五)---https是如何實現安全通信的


https是如何實現安全通信的

如果有不正確的地方,還望指出!

web基礎系列目錄

回顧

總結幾個概念(具體描述可以看上一篇文章)

數字簽名和數字證書的應用

  • 場景是這樣的:rose給jiajun寫情書
  • 剛開始用非對稱加密的方式,rose用jiajun的公鑰對情書進行加密,那么這樣的話,如果Billy截獲到情書,也無法對情書進行解密,因為只有jiajun有私鑰,除非私鑰泄露了
  • jiajun收到,要回信給rose,這個時候jiajun要證明這封信是他自己寫的,而且中途沒有被別人修改
  • 這個時候,jiajun將信進行摘要,然后對摘要用私鑰進行加密,這就是一個數字簽名,然后我將數字簽名和信一起發送給rose
  • rose接到后,用公鑰對數字簽名進行解密,得到的是一個摘要(這個時候不知道有沒有被人修改過),然后對信進行摘要,這樣的話,對兩個摘要進行比較,如果不同那么說明這封信被修改過。
  • 后來,Billy想冒充jiajun(讓rose和jiajun分手),他把jiajun的公鑰換成他自己的公鑰,然后按照上面的一樣的操作發送給rose。這樣Billy就可以得手
  • 再后來,為了不讓Billy得逞,jiajun想出一個方法,要解決這個問題就是要向rose確定這個公鑰是否是jiajun的,所以jiajun去找證書中心(CA),為公鑰做認證,證書中心用自己的私鑰對公鑰和一些相關中心進行加密,這樣產生的就是數字證書
  • 那么以后,jiajun發送消息給rose的時候,就將數字簽名和數字證書發送個rose,這樣rose通過數字證書就可以得到真實的公鑰,就可以通過數字簽名判斷是否更改過

https的安全通信

SSL/TLS

  • SSL(Secure Sockets Layer安全套接層),是一種網絡安全協議
  • TLS(Transport Layer Security傳輸層安全協議),是基於SSL協議的通用化協議,正逐步替代SSL。
  • SSL/TLS分為兩層,一層是記錄協議(建立在可靠的傳輸協議上(比如tcp),提供數據封裝,加密解密,數據建議等基本功能),一層是握手協議(建立在記錄協議上,在實際的數據傳輸開始前,進行加密算法的協商,通信密鑰的交換等)。

什么是https

  • 全稱是hypertext protocol over secure socket layer,也就是基於ssl的http協議,http的安全版,可以理解為https=http+ssl
  • https支持單向認證(只驗證服務端證書的有效性),也支持雙向驗證(既驗證服務端證書的有效性也驗證客戶端證書的有效性)
  • https協議在http協議與tcp協議之間增加一層安全層,數據在網絡傳輸之前,會先進行加密,再進行傳輸

為什么用https

  • 有時候,我們訪問一個國外的http站點,發現下面會有國內的一些小廣告,事實上是中間人(一些網絡節點,比如wifi熱點,路由器,防火牆等)劫持,在html注入了一段廣告的html。而只是注入廣告的話還只是小問題,如果有一些有一些重要的信息被抓取的話,那么問題就挺嚴重的
  • 打個比喻,http是三輪車,沒有封閉,里面裝的什么東西可以被看到,https是封閉的汽車,看不到里面裝了什么

https功能

  • 內容加密,用對稱密鑰進行加密
  • 身份認證,數字證書驗證身份

https協商過程

  • 瀏覽器向服務器發出請求
  • 服務器響應瀏覽器,將證書發送給瀏覽器,瀏覽器確認證書有效
  • 瀏覽器和服務器通過非對稱密鑰算法協商好對話密鑰(用於對稱加密)
  • 后面雙方都使用對話密鑰做對稱加解密就能完成整個通信
  • 總的來說,通信內容用對稱加密算法機密,而對稱加密的加密密鑰通過非對稱加密協商

握手過程(以RSA密鑰協商為例,不同的算法實現不一樣)

  • 客戶端發送消息,消息包含協議的版本信息,客戶端支持的加密算法,客戶端產生的隨機數
  • 服務端響應消息,消息包括服務端產生的隨機數,協議版本信息,服務端數字證書,從客戶端提供的加密算法確認使用的加密算法
  • 客戶端根據證書管理器,驗證服務端證書(驗證有效期,證書中的域名和瀏覽器中域名是否匹配等)的有效性
  • 驗證通過后,從證書獲取公鑰,生成隨機數,此時通過這3個隨機數經過一定的算法生成一個對話密鑰,然后發送隨機數(用證書的公鑰進行加密),
  • 服務器端用私鑰解密第三個隨機數,然后通過3個隨機數計算生成對話密鑰
  • 握手階段結束,客戶端和服務端進入加密通信,用對話密鑰加密內容

https的性能問題

  • 對比http,我們多了一個ssl握手的過程,而這個過程,有對稱加密和非對稱加密的過程,那么自然會消耗cpu資源了

用故事總結本文內容

  • 場景一樣,同樣是rose給jiajun寫情書
  • rose和jiajun協商好用對稱加密的方式給情書加密,可是現在有一個問題對稱密鑰怎么解決,無法安全地生成和保管對稱密鑰
  • 於是jiajun想了辦法,jiajun生成一對公鑰和私鑰,公鑰是公開的,於是rose生成一個用於對稱加密的對話密鑰,然后用公鑰加密這個對話密鑰,那么這樣的話,即使中間lBilly截獲了這部分內容,因為對話密鑰很安全,所以無法獲取內容
  • Billy很聰明,想到一個方法,偽裝成jiajun,把他的公鑰給rose,此時非對稱協商密鑰協商的對象是Billy
  • jiajun也不笨,很快他發現問題,要解決這個問題根本上就是要向rose證明這個公鑰是誰的。於是jiajun找到了認證中心CA,生成一份數字證書

我覺得分享是一種精神,分享是我的樂趣所在,不是說我覺得我講得一定是對的,我講得可能很多是不對的,但是我希望我講的東西是我人生的體驗和思考,是給很多人反思,也許給你一秒鍾、半秒鍾,哪怕說一句話有點道理,引發自己內心的感觸,這就是我最大的價值。(這是我喜歡的一句話,也是我寫博客的初衷)

作者:jiajun 出處: http://www.cnblogs.com/-new/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。如果覺得還有幫助的話,可以點一下右下角的【推薦】,希望能夠持續的為大家帶來好的技術文章!想跟我一起進步么?那就【關注】我吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM