html
HTTPS是一種經過計算機網絡進行安全通訊的傳輸協議。HTTPS經由HTTP進行通訊,但利用SSL/TLS來加密數據包。 HTTPS的通訊過程,充分利用了各類加密算法及其特性,本文將經過介紹HTTPS的通訊過程,介紹了各類加密算法在實際中的應用。算法
爲了更好的說明HTTPS的安全傳輸原理,咱們虛擬瞭如下的故事。瀏覽器
洞洞:"呼叫洞妖,呼叫洞妖!"安全
洞妖:"我是洞妖,我是洞妖,有啥事?"服務器
洞洞:"有個關於老闆的八卦新聞,你要不要聽?"網絡
洞妖:"快講,快講…..."加密
因而洞洞和洞妖"賓主雙方"就"愉快"地聊起了八卦新聞。spa
洞洞:"洞妖,洞妖。我這裏又有新的八卦新聞,你要不要聽?"操作系統
洞妖:"不要了,上一次咱們聊八卦的事情,都被其它人知道了。咱們通訊都是明文的,在網絡上感受就像裸奔。"計算機網絡
洞洞:"……,要不這樣,咱們弄個加密算法,用密鑰把咱們的通訊內容加密一下,傳輸給你,你經過解密算法用密鑰解密,這樣就不怕別人監聽了,就像這樣。"
洞妖:"好是好,但是密鑰你要怎麼給我呢?總不能這樣刺裸裸的經過網絡明文傳輸密鑰吧。"
洞洞:"這倒也是。要不這樣,我下次過去找你,隨身帶過去給你。"
洞妖:"成。"
在洞妖獲得密鑰以後,他們又能夠愉快地聊天了。
洞妖:"呼叫洞洞,呼叫洞洞!"
洞洞:"啥事?"
洞妖:"請教你一個問題,若是我想和其它人在網絡上聊天,有沒有其它的加密算法,我總不能一個個的先跑到他們身邊把密鑰當面告訴他們後,再經過網絡聊天吧,若是這些人是天南地北的呢?"
洞洞:"有辦法。有一種非對稱加密算法,它有兩個密鑰,一個是公鑰,能夠明文傳輸的。一個是私鑰,由我保存,其它人都不知道。加密和解密算法不一樣。你經過公鑰加密的信息只有我用私鑰才能解開,就像這樣。"
洞妖:"好方法,那根據這個算法,我生成一套公鑰私鑰對,你也生成一套不一樣的公鑰私鑰對。咱們各自告訴對方公鑰。我傳信息給你的時候,用你給的公鑰加密,你用你的私鑰解密。一樣的,你給我發信息的時候,用我給的公鑰加密,我收到信息後用個人私鑰解密。"
洞洞:"聰明。來來來,我再和說一個老闆的八卦吧…..."
洞妖:"洞洞,洞洞!"
洞洞:"咋了?"
洞妖:"你有沒有發現,用非對稱加密算法進行通訊,其加解密過程特別慢?"
洞洞:"是有點慢。由於非對稱加密算法運算量大。那要不這樣,咱們第一次用非對稱加密算法傳遞對稱加密算法的密鑰,後續通訊就用對稱加密算法。除了第一次用非對稱加密算法加解密密鑰的時候比較慢外,其它時間都不會慢了。並且也能夠保證對稱加密算法密鑰的安全性。這樣能夠充分利用非對稱加密算法和對稱加密算法的各自特色。"
洞妖:"妥!"
洞妖:"洞洞,洞洞!"
洞洞:"啥事?"
洞妖:"洞洞,你咋證實你洞洞呢?"
洞洞:"我去,這不就是和要證實你爹是你爹一個道理嘛。"
洞妖:"哈哈哈,別誤會。我想說的是,會不會在咱們通訊過程當中,有個中間人,而咱們收到的公鑰都是他的,他獲取咱們的各自消息,而後中轉。那他就能夠看到咱們全部的信息,就像這樣(中間人攻擊)"
洞洞:"我去,若是中間人是老闆,那咱們不是死翹翹了。看來仍是在公鑰傳輸上出問題。你看,要不這樣,咱們找個可靠的人作公證人,咱們各自把公鑰交給他。由他讓頒佈一個證書,證書包含公鑰以及咱們的身份信息,來證實咱們各自的身份。"
洞妖:"可行,不過若是證書在傳輸過程當中被人篡改,別人偷窺了呢?"
洞洞:"可讓公證人用數字摘要算法,把公鑰和身份信息生成一個摘要。同時用非對稱加密算法把對摘要進行加密,生成數字簽名。而後把【公鑰和身份信息+數字簽名】合併,造成數字證書。就像這樣"
洞妖:"嗯,那我在得到數字證書的時候,就能夠用公鑰進行解密生成摘要信息,再用數字摘要算法對公鑰和身份信息生成摘要信息,二者比對,若是能匹配,就說明沒有被篡改。"
備註:數字證書一般來講是由受信任的數字證書頒發機構CA,在驗證服務器身份後頒發。
洞妖:"等等,好像還有問題。公證人公鑰傳輸過程也會出現中間人攻擊問題。"
洞洞:"我去,咱們採用數字證書方式就是爲了解決公鑰傳輸的中間人攻擊問題,如今公證人的公鑰傳輸也出現中間人攻擊問題,死循環了。看來,這個公證人公鑰只能事先經過其它途徑給你了。"
洞妖:"咱們把公證人公鑰預先加載在操做系統中便可。"
洞洞:"完美!固然,若是操做系統和瀏覽器的公鑰也被篡改,那咱們就沒招了。因此不要輕易信任安裝未知證書。"
備註:微軟等公司會根據一些權威安全機構的評估選取一些信譽很好而且經過必定的安全認證的證書發佈機構,把這些證書發佈機構的證書默認安裝在操做系統中,而且設置爲操做系統信任的數字證書。
HTTPS的信任基於預先安裝在操做系統中的證書頒發機構(CA)。可實現防篡改和中間人攻擊。它的簡易安全通訊過程以下: