https是如何實現安全通訊的
若是有不正確的地方,還望指出!html
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/
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。若是以爲還有幫助的話,能夠點一下右下角的【推薦】,但願可以持續的爲你們帶來好的技術文章!想跟我一塊兒進步麼?那就【關注】我吧。web