前一篇文章:計算機網絡 —— HTTP 協議(詳解)-CSDN博客
目錄
·前言
一、HTTPS 協議簡介
二、HTTPS 工作過程
1.對稱加密
2.非對稱加密
3.中間人攻擊
4.引入證書
三、HTTPS 常見問題
1.中間人能否篡改證書?
2.中間人能否調包證書?
3.HTTPS 工作完整流程
·總結
·前言
? ? ? ? 前一篇文章中對?HTTP 協議整體做了一個基本介紹,在本篇文章里將介紹一下基于 HTTP 協議創造出來的 HTTPS 協議,關于 HTTPS 協議的重點內容就是它的一個工作過程,它是如何保證我們網絡中傳輸數據的安全性呢?這將是本篇文章的要重點介紹的內容,下面就開始本篇文章的內容介紹。
一、HTTPS 協議簡介
? ? ? ? HTTPS 協議與 HTTP 協議一樣都是應用層協議,HTTPS 協議是在 HTTP 協議的基礎上引入了一個加密層,由于 HTTP 協議的內容都是按照文本的方式明文傳輸,這就導致在使用 HTTP 協議傳輸數據的過程中會出現一些數據被篡改的情況,比如:“運營商劫持”。
? ? ? ? 什么是 “運營商劫持” 呢?不知道有沒有小伙伴在網上搜索某個軟件點擊下載后發現下的不是要下載的軟件而是其他軟件,這就是 “運營商劫持”,如下圖所示:


? ? ? ? 如上圖所示,當我們下載一個 “天天動聽” 時,圖1 未被劫持點擊下載按鈕是可以彈出正確的天天動聽的鏈接,圖2 已被劫持時,點擊下載按鈕,彈窗的是 QQ瀏覽器的下載鏈接,這就是 “運營商劫持”,那么它是如何做到的呢?流程如下圖所示:
?????????當然,不止運營商可以劫持,其他的 “黑客” 也可以用類似的手段來進行劫持,竊取用戶的隱私信息,或者篡改內容,所以在互聯網上,明文傳輸是比較危險的事情,HTTPS 就是在 HTTP 的基礎上進行了加密,進一步來保證用戶的信息安全。
? ? ? ? 解決安全問題最核心的要點就是 “加密”,什么是加密呢?加密就是把明文(要傳輸的真實數據)進行一系列變換,生成密文(針對明文加密之后得到的結果,往往不直觀,不易理解),解密就是把密文通過一系列變換,還原成明文,在這個加密與解密的過程中,往往需要一個或者多個中間的數據來輔助完成這個過程,這樣的數據就被稱為 “密鑰”。
二、HTTPS 工作過程
? ? ? ? 為了保證數據的安全,HTTPS 就在 HTTP 基礎上進行 “加密” 操作,這樣網絡上傳輸的數據就不再是直接傳輸明文了,而是加密之后的 “密文”,加密的方式有很多,但是整體可以分為兩大類:“對稱加密” 和 “非對稱加密”,下面我就來介紹一下 HTTPS 的工作過程,及遇到問題的對應解決方法。
1.對稱加密
? ? ? ? 對稱加密其實就是通過同一個 “密鑰”,來把明文加密成密文,并且還可以把密文加密成明文,引入對稱加密之后,即使數據被截獲,由于黑客不知道密鑰是什么,也就無法進行解密進一步去獲取我們請求的真實內容了,引入對稱加密后,此時數據傳輸過程如下圖所示:
? ? ? ? 根據上述介紹可以發現對稱加密具有以下特點:
- 使用對稱加密,客戶端與服務器需要使用同一個密鑰;
- 不同的客戶端需要使用不同的密鑰(如果密鑰都相同,那么黑客就可以獲取密鑰)。?
? ? ? ? 此時,由于不同客戶端使用的密鑰都不相同,這就意味著服務器需要維護每個客戶端和密鑰的關聯關系會引入很大的額外開銷。
? ? ? ? 對稱加密除了會引入額外的開銷還有一個致命的問題,那就是這種加密并不安全,由于對稱密鑰是要傳輸給對方的,就意味著傳輸密鑰的過程是明文傳輸的,那么此時黑客只要獲取到傳輸的密鑰,對稱加密的操作就毫無意義了,如下圖所示:
? ? ? ? ?造成上圖結果就是因為使用明文傳輸密鑰,黑客就會獲取到密鑰,后續的加密操作就形同虛設了,所以我們需要對傳輸的密鑰進行加密傳輸,如果我們對密鑰仍進行對稱加密的方式進行傳輸就需要確定一個 “密鑰的密鑰”,此時面臨的問題還是 “密鑰的密鑰” 是明文,黑客仍然可以拿到密鑰,所以對密鑰進行加密傳輸使用對稱加密的方式就行不通了,這就需要引入非對稱加密。
2.非對稱加密
? ? ? ? 使用非對稱加密主要目的就是為了對 “對稱加密” 的密鑰進行加密,來確保對稱密鑰的安全性,在非對稱加密中要用到兩個密鑰:“公鑰” 與 “私鑰”,公鑰和私鑰是配對的(公鑰對明文加密變成密文,密文只能使用配對的私鑰來進行解密),它們最大的缺點就是加密與解密的運算速度非常慢(消耗 CPU 資源),所以不能完全使用非對稱加密來對傳輸的數據進行加密,而只是對“對稱加密”的密鑰進行加密。
? ? ? ? 引入非對稱加密之后,就可以由服務器生成公鑰和私鑰,公鑰可以公開給每個客服端,私鑰只有自己知道,這樣客戶端就可以使用公鑰對對稱密鑰進行加密然后傳輸給服務器,服務器獲取到密文使用私鑰解密獲取到對稱密鑰,后面就可以繼續使用對稱加密來進行數據傳輸了,具體過程如下圖所示:
? ? ? ? 下面我來對上述過程做一個梳理:
- ?客戶端在本地生成對稱密鑰,通過公鑰加密,發送給服務器;
- 由于黑客沒有私鑰所以無法對截取的數據進行解密進而無法獲取對稱密鑰;
- 服務器使用私鑰解密,獲取對稱密鑰,使用對稱密鑰加密給客戶端返回的響應;
- 后續客戶端與服務器的通信使用對稱加密即可,由于該密鑰只有客戶端與服務器兩個主機知道,所以黑客截獲數據也無法進行解密。
? ? ? ? 上述過程雖然看起來安全,但是還有漏洞,由于公鑰是需要客戶端從服務器這邊獲取,那么就存在一個問題:獲取的公鑰是不是黑客偽造的?這就涉及到中間人攻擊了。?
3.中間人攻擊
? ? ? ? 黑客通過中間人攻擊就可以獲取到對稱密鑰,由于非對稱加密算法是公開的,所以黑客也可以使用非對稱加密算法來得到自己的公鑰私鑰,此時就可以在客戶端向服務器發送獲取公鑰的請求時進行中間人攻擊,具體過程如下圖所示:
?????????下面我來對上述過程做一個梳理:
- 服務器使用非對稱加密算法生成公鑰:pub1,私鑰:pri1;
- 黑客使用非對稱加密算法生成公鑰:pub2,私鑰:pri2;
- 客戶端生成對稱密鑰:key;
- 客戶端向服務器發送請求詢問公鑰是什么?
- 服務器明文傳輸公鑰 pub1 給客戶端;
- 黑客截取數據,提取公鑰 pub1 并保存,然后將數據中的公鑰 pub1 替換成自己的公鑰 pub2,并將偽造的數據發給客戶端;
- 客戶端收到數據,提取公鑰 pub2(并不清楚公鑰已經被換),用公鑰 pub2 加密對稱密鑰 key,形成報文發送給服務器;
- 黑客截取數據,直接使用自己的私鑰 pri2 進行解密,獲取到對稱密鑰 key,再使用保存的服務端公鑰 pub1 加密后,將報文發送給服務器;
- 服務器拿到報文后,使用私鑰 pri1 進行解密,獲取對稱密鑰 key;
- 后續服務器與客戶端都使用 key 進行對稱加密,進行通信,此時黑客就可以使用對稱密鑰 key 劫持數據對數據進行竊聽或者修改。
????????那么如何解決中間人攻擊這樣的問題呢?最關鍵的一點就在于客戶端拿到公鑰的時候要有辦法驗證這個公鑰是真的而不是黑客偽造的,這就需要服務器提供一個 “證書”。?
4.引入證書
? ? ? ?證書是一個結構化的數據,其中包含很多的信息,如:證書發布機構、證書有效期、公鑰、證書所有者、簽名……,服務器在使用 HTTPS 之前需要向第三方公正機構申請一份數字證書,然后服務器把證書傳給瀏覽器,瀏覽器從證書中獲取公鑰就可以了,證書就相當于身份證,證明當前公鑰的正確性。
? ? ? ? 在證書中,用來驗證證書真偽的信息就是 “簽名”,對于簽名要詳細介紹一下,這是通過證書解決中間人攻擊問題的關鍵,簽名的形成也是基于非對稱加密算法的,當服務端申請證書的時候,公正機構就會對服務端進行審核,并專門為該網站形成數字簽名,過程如下:
- 公正機構擁有非對稱加密的公鑰:A 和私鑰:A*;
- 公正機構對服務端申請的證書明文數據進行 hash,形成數據摘要;
- 公正機構再對數據摘要用私鑰 A* 加密,得到簽名 S。
? ? ? ? 此時,服務端申請的證書明文與簽名 S 就共同形成了證書,這樣的證書就頒布給了服務端。這樣就可以解決中間人攻擊問題,此時數據傳輸的過程如下圖所示:
? ? ? ? 圖中客戶端獲取到證書對證書進行校驗的過程如下:
- 判定證書有效期是否過期;
- 判定證書的發布機構是否受信任(操作系統中已經內置了受信任的證書發布機構);
- 驗證證書是否被篡改:從操作系統中獲取證書發布機構的公鑰,對簽名進行解密,得到 hash 值(數據摘要)設為 hash1,然后計算整個證書的 hash 值設為 hash2,對比 hash1 和 hash2 是否相等,如果相等就說明證書沒有被篡改過。?
三、HTTPS 常見問題
1.中間人能否篡改證書?
? ? ? ? 中間人無法篡改證書,理由如下:
- 中間人篡改了證書的明文,由于他沒有公正機構的私鑰,所以無法在?hash 之后使用私鑰形成簽名,那么就無法對篡改后的證書形成匹配的簽名;
- 如果中間人強行篡改,客戶端收到證書后在驗證時就會發現證書明文的 hash 值與簽名解密后得到的 hash 值不一樣,就會發現證書被篡改,從而終止向服務器傳輸信息。?
2.中間人能否調包證書?
? ? ? ? 中間人無法調包整個證書,理由如下:
- 中間人沒有公正機構的私鑰,所以無法制作假的證書;
- 中間人只能向公正機構申請真證書,然后使用自己申請的證書進行掉包;
- 但是證書中明文包含了域名等服務端認證信息,所以整體調包客戶端依舊可以識別。
? ? ? ? 我們要知道,中間人沒有公正機構的私鑰對任何證書都無法進行合法修改,包括自己的。?
3.HTTPS 工作完整流程
? ? ? ? 左側是客戶端要做的事,右側是服務器要做的事,完整流程如下圖所示:
·總結
? ? ? ? 文章到此就要結束了,本篇文章重點介紹了 HTTPS 的工作過程,在這里涉及到的密鑰一共有三組,如下所示:
- 第一組(非對稱加密):用于校驗證書是否被篡改,服務器持有私鑰(私鑰在注冊證書時獲得),客戶端持有公鑰(操作系統包含了可信任的認證機構有哪些,同時持有對應的公鑰),服務器使?這個私鑰對證書的簽名進行加密,客戶端通過這個公鑰解密獲取到證書的簽名,從?校驗證書內容是否是篡改過;
- 第二組(非對稱加密):用于協商?成對稱加密的密鑰,服務器生成這組 私鑰-公鑰 對,然后通過證書把公鑰傳遞給客戶端,然后客戶端用這個公鑰給?成的對稱加密的密鑰加密,傳輸給服務器,服務器通過私鑰解密獲取到對稱加密的密鑰;
- 第三組(對稱加密):客戶端和服務器后續傳輸的數據都通過這個對稱密鑰加密解密。
? ? ? ? ?切的關鍵都是圍繞這個對稱加密的密鑰,其他的機制都是輔助這個密鑰?作的,第二組非對稱加密的密鑰是為了讓客戶端把這個對稱密鑰傳給服務器,第一組非對稱加密的密鑰是為了讓客戶端拿到第二組非對稱加密的公鑰,如果你認為讀了本篇文章您有所收獲,希望給本篇文章點個贊,收藏走一波,后面我會繼續與大家分享計算機網絡的相關知識,關注博主不迷路~~~您的支持就是我創作最大的動力,我們下一篇文章再見~~~