聽說這是程序員被黑得最慘的一次 - SSL/TLS協議原理解析

本文系做者學習後鞏固知識點,錯誤之處煩請點出,本文從敘述一個小故事的視角來介紹 SSL/TLS 的原理,但願對讀者有所啓發。html

背景

程序員小明想給隔壁小紅寫信表白,可是又不想讓信件內容被其餘人看見,但願只有小紅才能看見信件內容,火燒眉毛的小明的大腦飛快運轉起來。程序員

小明
小明

預備基礎知識

  • 對稱密鑰加密(Symmetric Key Cryptography):加密與解密使用相同密鑰。對稱加密算法的特色是算法公開、計算量小、加密速度快、加密效率高。缺點是交易雙方都使用一樣鑰匙,安全性得不到保證。算法

  • 非對稱密鑰加密(Asymmetric Key Cryptography):加密與解密使用不一樣密鑰。非對稱加密使用一對祕鑰,一個用來加密,一個用來解密,並且公鑰是公開的,祕鑰是本身保存的,其安全性更好。缺點是加密和解密花費時間長、速度慢,只適合對少許數據進行加密。安全

  • 哈希算法(Hash Algorithm):又稱散列算法,雜湊算法,是一種從任意文件中創造小的數字「指紋」的方法。與指紋同樣,散列算法就是一種以較短的信息來保證文件惟一性的標誌,這種標誌與文件的每個字節都相關,並且難以找到逆向規律。所以,當原有文件發生改變時,其標誌值也會發生改變,從而告訴文件使用者當前的文件已經不是你所需求的文件。性能

信件加密(對稱加密)

小明想到對信件內容進行加密,而加密算法通常分爲 對稱加密非對稱加密 兩種。非對稱加密對加密性能較差,對加密內容有長度限制,因此加密信件內容咱們只能選擇對稱加密方式。使用對稱加密算法和一個 會話祕鑰 對信件內容加密,當小明把加密好的信件送給小紅,小紅收到密信後須要使用同一個會話祕鑰進行解密,小明該如何才能安全地把會話祕鑰送到小紅手上呢?學習

信件加密
信件加密

會話祕鑰加密(非對稱加密)

直接將會話祕鑰和信件打包一塊兒發出去,若是趕上了和小明同樣懂得加密算法的程序員,那信件內容至關於不設防,因此咱們也要想辦法對祕鑰進行加密,由於祕鑰的長度通常都不會太長,因此咱們可使用非對稱加密算法加密祕鑰加密

非對稱加密祕鑰有兩份,能夠任選一把做爲 私鑰 ,供本身使用,另一把做爲 公鑰 ,分發出去供收信方使用。小明用本身的私鑰對會話祕鑰進行加密,這樣會話密鑰就能夠確保安全了。可是小明仍然沒法保證公鑰能安全送到小紅手中,若是公鑰被壞人獲得了,甚至能夠假冒成小紅與小明互相通訊,細思恐極之下,小明陷入了深思中。操作系統

一對祕鑰
一對祕鑰

權威機構

N多年過去了,小明經過不懈努力,終於找到了安全傳輸公鑰的辦法。小明創建了一個權威機構,該權威機構專門頒佈一種數字證書,因爲該權威機構馳名海內網而且公認信用可靠,它頒佈數字證書基本能夠肯定證書內容可靠,在其之下還有不少各級證書頒佈機構,受大衆信任程度各不相同。咱們的電腦在安裝操做系統時,系統順帶安裝了一些受信任的證書頒佈機構的證書,證書包含有這些機構祕鑰對應的公鑰。3d

權威機構
權威機構

數字證書

小明只要去證書頒佈機構申請一個數字證書,數字證書中包含了很多於如下幾項內容:code

  • 證書的發佈機構
  • 證書的有效期
  • 公鑰
  • 證書的全部者
  • 簽名所使用的算法
  • 指紋以及指紋算法

數字證書
數字證書

而後將數字證書發給小紅,小紅獲得數字證書後,經過證書發佈機構的公鑰(默認安裝在系統中)能夠對證書內容解密,若是成功解密,說明該證書來源真實可靠,以該證書頒佈機構的名譽保證。數字證書中的 證書全部者 保證了公鑰來自於小明,而不是來自於隔壁老王的兒子小王。來源可靠,可是不能保證證書內容沒有被別人篡改,這個時候就涉及到了指紋和數字簽名。

指紋

1. 指紋加密

證書頒佈機構在給小明發證書時,把證書的發佈機構證書的有效期公鑰證書的全部者等信息以明文的形式寫到證書裏面,而後用一個指紋算法計算出這些數字證書內容的一個指紋,並把指紋和指紋算法用本身的私鑰進行加密獲得數字簽名,而後這些內容一塊兒打包發給小明,還會將一個專屬於小明私鑰給到小明,這個私鑰和證書中的公鑰爲一對。

指紋
指紋

2. 指紋驗證

而這個證書由小明又轉送至小紅手中,首先小紅讀取證書中的證書頒發機構爲SecureTrust CA ,而後會在操做系統中受信任的發佈機構的證書中去找SecureTrust CA的證書,若是找不到,那說明證書的發佈機構是個水貨發佈機構,小明的證書和內容可能有問題。 若是在系統中找到了SecureTrust CA的證書,那麼從證書中取出SecureTrust CA的公鑰,而後對小明的證書裏面的數字簽名用這個公鑰進行解密,獲得指紋和指紋算法,而後使用這個指紋算法計算小明的證書的指紋,將這個計算出來指紋與放在證書中的指紋對比,若是一致,說明小明的證書確定沒有被修改過而且證書是SecureTrust CA發佈的。

指紋驗證
指紋驗證

握手流程

最終小紅能夠安全地拿到小明的公鑰,每次寫信的時候隨機生成一個會話祕鑰,再使用公鑰對會話祕鑰加密後發給小明,小明用本身的私鑰解密獲得會話祕鑰,而後對會話祕鑰hash後,將hash值加密發回給小紅,小紅使用公鑰解密獲得hash值,而後本身也對會話祕鑰進行hash計算,對比本身算出的hash值和對方發過來的hash值,若是一直就能夠確認對方是持有私鑰的小明瞭。而後雙方就可使用這個會話祕鑰進行通訊了。

握手過程
握手過程

雖然如今信件若是被第三方持有了也沒法得知信件內容,可是趕上無聊的人他仍然能夠對信件內容進行破壞。在每次發送信息時,先對信息的內容進行一個hash計算得出一個指紋,將信息的內容和這個指紋一塊兒加密後發送。接收方在收到後進行解密獲得明文的內容和指紋,而後接收方再本身對收到信息內容作一次hash計算,與收到的指紋進行對比看是否匹配,若是匹配就說明信息在傳輸過程當中沒有被修改過。若是不匹配說明中途有人故意對加密數據進行了修改,馬上中斷通話過程後作其它處理。

小紅髮送信息
小紅髮送信息

服務端.png
服務端.png

結語

到這裏,小明終於能夠給小紅寫信了,然而小紅已經和隔壁老王的兒子小王在一塊兒了。小明氣急,磨刀霍霍向小王...

欲知後事如何,趕忙點贊。有錯誤之處煩請指出

參考

相關文章
相關標籤/搜索