萬字長文帶你瞭解HTTPS原理

1 HTTP協議

1.1 HTTP協議的簡單介紹

​ ​ ​ ​ ​ ​ ​ ​ 在正式將HTTPS之前,我們要簡單介紹一下HTTP協議,什麼是HTTP協議呢?我們知道,當我們要上網前,必須要先去運營商那裏開通一下寬帶,我們才能愉快地在網上進行衝浪。而運營商收了我們的錢之後,就會給我們拉一條線,這根線就是寬帶(寬帶只是一個泛稱,我們平時接觸的叫雙絞線,是寬帶的一種,另外還有很多種類的寬帶,比如無線寬帶等,這裏就不再過多介紹),有了寬帶,就可以把兩臺,甚至是多臺計算機連了起來,這樣就有每臺計算機就在物理層面有了連接,也就是有了可以通信的基礎條件(對應着計算機網絡的物理層)。當然,只是簡單的把計算機用寬帶連了起來,還遠遠不能讓但是之間進行通信,還需要做一些其他的事情才行。這中間的過程有點複雜,想要詳細瞭解這一個過程的同學可以去學一下《計算機網絡》這門課,我這裏就簡單的說一下兩臺電腦之間通信的流程,這裏以我們常用的QQ聊天爲例,涉及的角色用A和B代替,當A要給B發一個消息時,大概流程是這樣的:

  1. A在他的QQ軟件上寫一條信息,然後點擊一下發送按鈕,把消息發送出去;
  2. A的計算機上的QQ軟件將這條信息裏面的內容交給A計算機的操作系統;
  3. A的計算機上的操作系統找到計算機上面的一個硬件:網卡,然後把這條信息交給網卡;
  4. 網卡再把這條信息交給寬帶;
  5. 這條信息通過寬帶把這條信息的內容傳給B的計算機的網卡;
  6. 然後B的計算機的網卡再把這條信息交給B的計算機的操作系統;
  7. B的計算機的操作系統接受到這條信息之後,把這條信息交給B的QQ軟件。

​ ​ ​ ​ ​ ​ ​ 至此,整個完整的通信流程就結束了,當然這裏是很簡單的描述了一下他的流程,通過上面的描述,我們可以知道,這裏面有很多不同層面的東西要在一起協同工作,而要把這些東西完美的結合在一起,讓他們協同工作,就需要制定很多的規範,這些規範也叫做協議。而HTTP就是期中一種協議,這種協議工作在應用層,也就是上面所說的QQ,現實中常見的實現了HTTP協議的應用還有瀏覽器微博等等。需要指出的是,不是每個應用都實現了HTTP協議,只有需要上網功能的才需要實現HTTP協議,比如記事本就不需要實現HTTP協議。
HTTP協議我們介紹完了,接下來我們就簡單說一下它的缺點,HTTP誕生的時候,需要上網的人還不多,而且那個時候上網的人心思也比較單純,並且在網上傳輸的信息也不是很很重要,所以它存在着一些風險,下面的圖就是HTTPS和HTTP的簡單對比。
在這裏插入圖片描述

HTTPS與HTTP的簡單對比

1.2 HTTP協議的存在風險

​ ​ ​ ​ ​ ​ ​ ​ 這裏用幾個小例子簡單解釋一下信息劫持、信息篡改和信息竊聽。

1.2.1 信息劫持

​ ​ ​ ​ ​ ​ ​ 正常情況下,瀏覽器應該是直接去訪問正規服務器的,但是如果瀏覽器在訪問正規服務器的過程中被黑客做了手腳,讓瀏覽器就會去訪問黑客的服務器,這個過程就叫做劫持,劫持的類型有很多種,下面的圖中只畫出了最常見的一種。
​ ​ ​ ​ ​ ​ ​ 舉一個簡單的例子幫助大家理解,當我們去車站去買票時,在半路的時候遇見了黃牛,然後被黃牛騙去了假售票處買了一張假票,黃牛把我們騙去假售票處的行爲就是劫持。
在這裏插入圖片描述

信息劫持

1.2.2 信息篡改

​ ​ ​ ​ ​ ​ ​ 正常情況下,瀏覽器進行給服務器發送一個給張三轉賬10萬塊的請求,服務器接收到這個請求之後,給張三轉10萬塊錢。但是這個請求被黑客攔截到了,並對請求的信息進行了修改,於是請求信息變成了給李四轉賬10萬塊,瀏覽器接收到這個請求之後,就給李四轉了10萬塊錢,請求信息裏面的收賬人的名字被篡改了,這個過程就是信息篡改。圖示如下:
在這裏插入圖片描述

信息篡改
​ ​ ​ ​ ​ ​ ​ 這個過程也可以舉個現實中的小例子來幫助大家理解,小明和小紅身處異地,小明給小紅買了一串珍珠項鍊,通過快遞寄給小紅,但是在快遞運輸過程中,被快遞員老王調了包,把珍珠項鍊換成了玻璃項鍊,這個把原始的東西替換掉的過程就是篡改。

1.2.3 信息竊聽

​ ​​ ​ ​ ​ ​ ​ 正常情況下,瀏覽器進行給服務器發送一個給張三轉賬10萬塊的請求,服務器接收這個請求之後,這個請求的內容只有瀏覽器與服務器知道。但是這個請求被黑客攔截到了,並對請求的信息的內容進行了讀取,於是除了瀏覽器和服務器之外,黑客也知道了請求裏面的內容,這個過程就是信息竊聽。圖示如下:
在這裏插入圖片描述

信息竊聽
​ ​ ​ ​ ​ ​ ​ 這裏再舉一個現實的小例子說明一下這個過程,小明在上課的時候寫了一封情書給小紅,然後在傳給小紅的過程中被小麗偷看了,所以小麗也知道了情書的內容,小麗偷看情書的行爲就是竊聽。

2 幾個相關的技術

​ ​ ​ ​ ​ ​ ​ 前面我們簡單介紹了一下HTTP以及它存在的一些缺點,既然HTTP存在着一些風險,那我們就要想辦法來解決這些風險,而解決的方案就是HTTPS。那什麼是HTTPS呢?在正式介紹HTTPS之前,我們還需要先認識幾個的概念。

2.1 對稱加密技術

​ ​ ​ ​ ​ ​ ​ ​對稱加密指的就是加密和解密使用同一個密鑰,所以叫做對稱加密。對稱加密只有一個密鑰。常見的對稱加密算法有:DES,AES,3DES等等。對稱加密的特點是加密速度極快,但是因爲加密和解密都是用同一個密鑰的原因,所以如果要進行密鑰分發的話,一旦被第三者截獲之後,加密就沒有了意義,第三者拿着這個密鑰也可以對密文進行解密。所以在對稱加密技術中,密鑰的安全分發比較困難,存在密鑰在分發過程中被人截獲的風險。而且如果密鑰過短的話,密鑰容易被通過窮舉法給破解出來。
在這裏插入圖片描述

對稱加密

2.2 非對稱加密技術

​ ​ ​ ​ ​ ​ ​ 非對稱加密指的是:加密和解密使用不同的密鑰,其中一把作爲公開的、可以發給任何人的公鑰,另一把作爲只有自己才能知道的、需要自己謹慎保管、任何人都不能給的私鑰。非對稱加密的特點是:

  1. 公鑰加密的信息,只有私鑰才能解密。
  2. 私鑰加密的信息,只有公鑰才能解密。

​ ​ ​ ​ ​ ​ ​ 常見的非對稱加密算法有:RSA,ECC等等 。
​ ​ ​ ​ ​ ​ ​ 非對稱加密有一個嚴重的缺點:加密速度慢。而且每次加密長度也有限制,比如1024位Key的加密長度不能超過117Byte。
在這裏插入圖片描述

非對稱加密
​ ​ ​ ​ ​ ​ ​ 這裏有個地方需要注意大家注意一下,那就是:雖然可以私鑰來加密數據,公鑰進行解密,但是這個其實並不能起到對數據保密的作用,因爲,公鑰是公開的,可能有很多人擁有公鑰,所以這個時候就起不到對數據保密的作用。但是由於私鑰只有一個人會有,所以如果用A的公鑰可以對密文進行解密,那麼就說明這個密文一定是A發的,這個時候就起到了簽名的作用。 ![在這裏插入圖片描述](https://img-blog.csdnimg.cn/2020052410251480.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3NjI5MDc4,size_16,color_FFFFFF,t_70)
非對稱加密的兩種作用

2.3 數字摘要

​ ​ ​ ​ ​ ​ ​ ​數字摘要就是指使用單向Hash(散列)函數將需要加密的明文摘要成一串固定長度的密文這一串密文,這串密文又稱爲數字指紋。這個密文的特點是,如果使用相同的單向Hash函數對他進行加密,它的長度是固定的,而且將不同的明文摘要成密文其結果總是不同的(哪怕原文只修改了一個標點符號它經過單向Hash函數運算得出的結果也是不一樣的),而如果使用相同的Hash單向函數對同樣的明文進行加密,其結果必定一致。常見的單向Hash(散列)函數有:MD5,SHA1等等。
在這裏插入圖片描述

數字摘要
​ ​ ​ ​ ​ ​ ​ 通過上圖,我們可以看見,當將原文的10萬修改成100萬之後,經過單向Hash函數運算之後,所得到的結果(`信息摘要`)是不同的。所以數字摘要可以用於信息完整性校驗的場景,用來驗證信息是否被別人修改過。此外,當我們要對大文件(比如系統鏡像)進行下載時,我們也可以使用數字摘要來驗證我們下載的文件是否完整,確認一下在我們下載過程有沒有因爲網絡波動的原因丟了一些什麼東西。

3 幾個簡單的應用場景

​ ​ ​ ​ ​ ​ ​ 介紹完了幾個相關的技術之後,我們接下來介紹幾個結合了我們剛剛所介紹的技術的應用場景。

3.1 數字簽名

​ ​ ​ ​ ​ ​ ​ 在正式介紹數字簽名之前,我們可以看看下面的圖。圖中,正常情況下,趙總給小王發了一條消息,小王接收到消息之後,給李總轉賬。但是因爲小王沒有辦法驗證這個轉賬的消息是不是趙總發過來的,所以如果黑客給小王發了一個僞造的消息之後,小王就會把錢轉給張三。而且在消息發送的過程中,還會有一種情況,那就是信息篡改,如果消息被黑客截獲了並做了修改,小張因爲無法辨別這個轉賬消息是否被修改過,這時候小王也會把錢轉給張三。
在這裏插入圖片描述

信息僞造與信息篡改

​ ​ ​ ​ ​ ​ ​ 這個時候就需要引入一個叫做數字簽名的技術了。數字簽名是隻有信息的發送者才能產生的、別人無法僞造的一段數字串,這段數字串同時也是對信息的發送者所發送的信息真實性的一個有效證明,即可以驗證這段數字串是否是由發送者所發出的 。一套數字簽名通常使用兩種互補的技術,一個用於簽名(非對稱加密技術),另一個用於驗證信息的完整性(數字摘要)。數字簽名是非對稱加密技術數字摘要技術的相結合應用。
在這裏插入圖片描述

數字簽名
​ ​ ​ ​ ​ ​ ​ 如上圖所示,趙總在給小王發消息前,先把他的公鑰交給小王,如果趙總要改小王發消息了,那趙總先將要發送的消息原文使用單向Hash函數生成一個數字摘要,然後使用他的私鑰對生成的數字摘要進行加密(也就是簽名),得到數字簽名,然後把原文與數字簽名進行打包,發送給小王。小王收到信息之後,先將打包信息分成兩部分:數字簽名和原文,然後使用王總的公鑰對數字簽名進行解密,如果能解密出來,則會得到一個`數字摘要1`,且可以證明這個信息是王總發過來的,這個時候小王還不能確定原文是不是被人篡改過,小王需要將原文使用和王總約定好的單向Hash函數對原文進行加密,生成一個`數字摘要2`,然後小王對這兩個數字摘要進行對比,看一下值是否相等,如果相等,則說明原文沒有被篡改過。這就是數字簽名的整個工作流程,數字簽名實現 了`完整性校驗`和`身份驗證`功能。

3.2 數字信封

​ ​ ​ ​ ​ ​ ​ 我們在前面介紹對稱加密與非對稱加密的時候,說了他們的優缺點:

  1. 對稱加密技術加密速度很快,但是密鑰分發困難,分發過程一旦被截獲了,整個加密過程就變得沒有了任何意義;
  2. 非對稱加密技術加密速度很慢,但是隻要我們將公鑰分發出去就行了,不怕別人知道我們的公鑰,公鑰分發相對簡單。

​ ​ ​ ​ ​ ​ ​ 既然如此,我們能不能設計一種技術,將這兩種加密技術的優點都結合起來,把他們的缺點淘汰掉呢?這就誕生了數字信封技術。數字信封是指:將對稱密鑰通過非對稱加密的技術分發對稱密鑰的方法,即發送方將原文用對稱密鑰加密,然後將對稱密鑰接收方公鑰加密之後發送給接收方。具體流程如下圖:
在這裏插入圖片描述

數字信封

​ ​ ​ ​ ​ ​ ​ 從圖中可以看出,一開始的時候,趙總先使用一個隨機數生成器,生成一個隨機數作爲對稱加密使用的對稱密鑰,然後使用這個對稱密鑰來加密要發給小王的原文,得到一串原文加密之後的密文,同時趙總使用小王的公鑰對對稱密鑰進行加密,得到一串對稱密鑰加密之後的密文,然後將原文加密之後的密文與對稱密鑰加密之後的密文組合在一起,打包發給小王。小王接收到了王總髮給他的消息之後,先將打包好的信息進行拆分,得到趙總發過來的原文加密之後的密文對稱密鑰加密之後的密文,然後使用自己的密鑰對對稱密鑰加密之後的密文進行解密,得到對稱密鑰,然後使用這個對稱密鑰對原文加密之後的密文進行解密,得到原文。這就是數字信封的工作流程,數字信封技術是結合了對稱加密技術非對稱加密技術兩種技術的一個具體實現,它綜合了性能與安全性的考慮。如果單單使用非對稱加密的話,它的速度會很慢,如果只使用對稱加密,那在密鑰的分發過程中,就存在被竊聽的風險。

3.3 CA機制

​ ​ ​ ​ ​ ​ ​ 經過前面的討論,你是不是覺得有了數字信封,就可以完美的實現加密的安全通信了,遺憾的是,事實並非如此,還記得我們前面介紹的信息篡改嗎?如果在小王獲取趙總的公鑰過程中,信息被篡改了,那這個時候,小王拿到的公鑰就是黑客給他的假公鑰,這時,如果小王用假公鑰加密消息,黑客就可以對這個加密的密文進行解密了,在這種情況下,消息也無法保證機密性,而且即使趙總拿到了小王用假公鑰加密的密文,趙總也無法對其進行解密。
在這裏插入圖片描述

公鑰篡改

​ ​ ​ ​ ​ ​ ​ 所以,爲了防止出現這種情況,就需要引入CA機制,CA就是一個證書服務機構,專門給我們頒發證書的,可以理解爲類似國家教育部一樣的權威機構,它給我們頒發的證書(比如:四六級證書),我們所有人都是信任並認可的。當我們使用公鑰加密機制時,我們去找CA機構給我們頒發一個證書,這個證書是使用了CA機構的私鑰來進行了加密(也就是簽名)的。而爲了保證CA機構的公鑰在傳輸過程中被人篡改,我們直接把傳輸過程給砍掉,直接把CA機構內置到操作系統裏面,這樣就黑客就無法在傳輸過程中對CA機構的公鑰進行篡改了,我們可以在Windows系統中,同時按住Windows + R鍵,在彈出的窗口中輸入certmgr.msc,就可以看到如下圖所示的頁面了。
在這裏插入圖片描述

操作系統的證書

​ ​ ​ ​ ​ ​ ​ 爲了方便理解,我們畫圖說明一下引入了CA機構後的公鑰分發流程,圖中的小王可以理解爲我們的操作系統,趙總則是對應着服務器,具體如下圖:
在這裏插入圖片描述
引入了CA機構後的公鑰分發過程

​ ​ ​ ​ ​ ​ ​ 這裏簡單描述一下引入了CA機構後的公鑰分發的流程,首先趙總去找CA機構申請一個屬於他的證書,這個證書裏面有趙總的公鑰,還有趙總的身份信息以及使用趙總的公鑰趙總的身份信息生成的數字簽名,此外,CA機構還會把跟趙總的公鑰配對的私鑰給趙總,讓趙總妥善保管。趙總拿到了證書之後,會把證書傳給小王,小王收到了證書之後,會使用CA結構的公鑰來解密證書裏面的數字簽名,然後如果解密出來了,就說明這個證書是CA機構頒發的,並且得到了一個數字摘要1,這個數字摘要是使用趙總的身份信息趙總的公鑰生成的,但是這個時候,還不說明這個證書的內容,特別是趙總的公鑰,有沒有被替換過,小王先要看一下證書裏面的身份信息是不是趙總的,如果是趙總的,再使用單向Hash函數將趙總的身份信息趙總的公鑰來生成一個數字摘要2,然後對比數字摘要1數字摘要2是否相等,如果相等,證書裏面的內容(特別是趙總的公鑰)沒有被替換過。這個流程中,其實除了多了CA機構這個東西之外,其它的步驟和思想就是我們前面所說的數字簽名
​ ​ ​ ​ ​ ​ ​ 需要指出的是,引入了CA機構之後,我們還可以避免信息劫持。大家可以想一下,如果瀏覽器在請求服務器的過程中,這個請求被黑客劫持了,如果黑客沒有證書,那黑客服務器所發送的消息就無法通過瀏覽器的認證,這時瀏覽器就可以終止這一次請求。如果黑客僞造了一個假的證書,因爲這個假證書是無法使用CA機構的私鑰進行簽名的,瀏覽器無法使用CA機構的公鑰對這個假證書的簽名內容進行解密,所以也無法通過身份認證。如果黑客也去CA機構申請了一個屬於他的證書B,用證書B來替換掉正規服務器的證書是不是可以呢?我們仔細思考後發現,也是不行的,因爲證書裏面還有服務器的身份信息(對應着服務器的域名),所以在瀏覽器在進行完整性校驗時,黑客的證書B是無法通過校驗的。

向CA機構申請證書的時候,CA機構是會對申請人的身份進行驗證的,具體方法的驗證方法,等下在HTTPS的圖中會說到。

4 HTTPS

​ ​ ​ ​ ​ ​ ​ 前面鋪墊了那麼多,終於要到我們的主角HTTPS了,如果你對前面的知識已經瞭解了,那麼,我相信只要我把圖給貼出來,你就可以瞭解它的工作原理了。不信的話,看圖:
在這裏插入圖片描述

HTTPS原理

​ ​ ​ ​ ​ ​ ​ 其實這塊已經沒有什麼好說的了,我個人人爲我這個圖已經畫得比較清晰了,圖中每個模塊的詳細過程都可以在前面所講的技術中所列出的圖中找到。HTTPS其實就是對前面所講的各種技術的進行了非常巧妙組合而得到的一個技術產物,這裏面需要指出的是,圖中出現了三個隨機數,這三個隨機數其實是因爲計算機產生的隨機數是一個假隨機數,所以爲了避免出現每次產生的隨機數都一樣的情況,使用了三個隨機數來生成對稱密鑰,爲什麼是三個隨機數呢?其實這是在實踐過程中得出的一個結果,人們發現三個隨機數已經可以滿足需求了(這裏指出一點,我們在設計某一個技術算法的時候,其實大多數時候我們會發現,功能和性能往往是不能兼得的,所以我們需要在兩者之間找到一個平衡點,這裏的隨機數是一個例子,數字信封也是一個例子)。還有一點,圖中服務器與瀏覽器交互的線其實就是TLS/SSL的握手過程,我這裏只是列出了關鍵的幾部,更詳細的過程大家可以自行去網上查閱相關資料,因爲時間與篇幅原因,我這裏就不再贅述了。

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