天天看點

萬字長文帶你了解HTTPS原理1 HTTP協定2 幾個相關的技術4 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原理1 HTTP協定2 幾個相關的技術4 HTTPS

HTTPS與HTTP的簡單對比

1.2 HTTP協定的存在風險

​ ​ ​ ​ ​ ​ ​ ​ 這裡用幾個小例子簡單解釋一下資訊劫持、資訊篡改和資訊竊聽。

1.2.1 資訊劫持

​ ​ ​ ​ ​ ​ ​ 正常情況下,浏覽器應該是直接去通路正規伺服器的,但是如果浏覽器在通路正規伺服器的過程中被黑客做了手腳,讓浏覽器就會去通路黑客的伺服器,這個過程就叫做劫持,劫持的類型有很多種,下面的圖中隻畫出了最常見的一種。

​ ​ ​ ​ ​ ​ ​ 舉一個簡單的例子幫助大家了解,當我們去車站去買票時,在半路的時候遇見了黃牛,然後被黃牛騙去了假售票處買了一張假票,黃牛把我們騙去假售票處的行為就是劫持。

萬字長文帶你了解HTTPS原理1 HTTP協定2 幾個相關的技術4 HTTPS

資訊劫持

1.2.2 資訊篡改

​ ​ ​ ​ ​ ​ ​ 正常情況下,浏覽器進行給伺服器發送一個

給張三轉賬10萬塊

的請求,伺服器接收到這個請求之後,給張三轉10萬塊錢。但是這個請求被黑客攔截到了,并對請求的資訊進行了修改,于是請求資訊變成了

給李四轉賬10萬塊

,浏覽器接收到這個請求之後,就給李四轉了10萬塊錢,請求資訊裡面的收賬人的名字被篡改了,這個過程就是資訊篡改。圖示如下:

萬字長文帶你了解HTTPS原理1 HTTP協定2 幾個相關的技術4 HTTPS

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

1.2.3 資訊竊聽

​ ​​ ​ ​ ​ ​ ​ 正常情況下,浏覽器進行給伺服器發送一個

給張三轉賬10萬塊

的請求,伺服器接收這個請求之後,這個請求的内容隻有浏覽器與伺服器知道。但是這個請求被黑客攔截到了,并對請求的資訊的内容進行了讀取,于是除了浏覽器和伺服器之外,黑客也知道了請求裡面的内容,這個過程就是資訊竊聽。圖示如下:

萬字長文帶你了解HTTPS原理1 HTTP協定2 幾個相關的技術4 HTTPS

資訊竊聽 ​ ​ ​ ​ ​ ​ ​ 這裡也用現實的小例子說明一下這個過程,小明在上課的時候寫了一封情書給小紅,然後在傳給小紅的過程中被小麗偷看了,是以小麗也知道了情書的内容,小麗偷看情書的行為就是竊聽。

2 幾個相關的技術

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

2.1 對稱加密技術

​ ​ ​ ​ ​ ​ ​ ​對稱加密指的就是加密和解密使用同一個密鑰,是以叫做對稱加密。對稱加密隻有一個密鑰。常見的對稱加密算法有:DES,AES,3DES等等。對稱加密的特點是加密速度極快,但是因為加密和解密都是用同一個密鑰的原因,是以在進行密鑰分發時,密鑰如果被第三者截獲了,加密就沒有了任何意義,因為第三者拿着這個密鑰也可以對密文進行解密。是以在對稱加密技術中,密鑰的安全分發比較困難,存在密鑰在分發過程中被人截獲的風險。此外如果密鑰過短的話,密鑰也容易通過窮舉法給破解出來。

萬字長文帶你了解HTTPS原理1 HTTP協定2 幾個相關的技術4 HTTPS

對稱加密

2.2 非對稱加密技術

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

  1. 公鑰加密的資訊,隻有私鑰才能解密。
  2. 私鑰加密的資訊,隻有公鑰才能解密。

​ ​ ​ ​ ​ ​ ​ 常見的非對稱加密算法有:RSA,ECC等等 。

​ ​ ​ ​ ​ ​ ​ 非對稱加密有一個嚴重的缺點:加密速度慢。而且每次加密長度也有限制,比如1024位Key的加密長度不能超過117Byte。

萬字長文帶你了解HTTPS原理1 HTTP協定2 幾個相關的技術4 HTTPS

非對稱加密

​ ​ ​ ​ ​ ​ ​ 這裡有個地方需要大家注意一下,那就是:雖然可以用私鑰來加密資料,用公鑰進行解密資料,但是這個加密方式其實并不能起到對資料保密的作用。因為,公鑰是公開的,可能有很多人擁有公鑰,是以這個時候就起不到對資料保密的作用。但是由于私鑰隻有A一個人持有,是以如果可以用A的公鑰對密文進行解密,則說明這個密文一定是A發的,這個時候就起到了

簽名

的作用。

萬字長文帶你了解HTTPS原理1 HTTP協定2 幾個相關的技術4 HTTPS

非對稱加密的兩種作用

2.3 數字摘要

​ ​ ​ ​ ​ ​ ​ ​數字摘要就是指使用單向Hash(散列)函數将需要加密的明文

摘要

成一串

固定長度

的密文,這串密文又稱為

數字指紋

。這個密文的特點是,①:如果使用相同的單向Hash函數對它進行加密,則它的長度是固定的;②:如果使用相同的Hash單向函數對同樣的明文進行加密,其結果必定一緻;③将不同的明文使用相同的Hash單向函數加密成密文其結果總是不同的(哪怕原文隻修改了一個标點符号它經過單向Hash函數運算得出的結果也是不一樣的)。常見的單向Hash(散列)函數有:MD5,SHA1等等。

萬字長文帶你了解HTTPS原理1 HTTP協定2 幾個相關的技術4 HTTPS

數字摘要

​ ​ ​ ​ ​ ​ ​ 通過上圖,我們可以看見,當将原文的10萬修改成100萬之後,經過單向Hash函數運算之後,所得到的結果(

資訊摘要

)是不同的。是以數字摘要可以用于資訊完整性校驗的場景,用來驗證資訊是否被别人修改過。此外,當我們要對大檔案(比如系統鏡像)進行下載下傳時,我們也可以使用數字摘要來驗證我們下載下傳的檔案是否完整,确認一下在我們下載下傳檔案時有沒有因為網絡波動的原因丢了一些什麼東西。

3 幾個簡單的應用場景

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

3.1 數字簽名

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

萬字長文帶你了解HTTPS原理1 HTTP協定2 幾個相關的技術4 HTTPS

資訊僞造與資訊篡改

​ ​ ​ ​ ​ ​ ​ 這個時候就需要引入一種叫做

數字簽名

的技術了。

數字簽名

是隻有資訊的發送者才能産生的、别人無法僞造的一段數字串,這段數字串同時也是對資訊的發送者所發送的資訊真實性的一個有效證明,即可以驗證這段資訊串是否是由發送者所發出的 。一套數字簽名通常使用兩種互補的技術,一個用于簽名(

非對稱加密技術

),另一個用于驗證資訊的完整性(

數字摘要

)。數字簽名是

非對稱加密技術

數字摘要技術

的相結合應用。

萬字長文帶你了解HTTPS原理1 HTTP協定2 幾個相關的技術4 HTTPS

數字簽名

​ ​ ​ ​ ​ ​ ​ 如上圖所示,趙總在給小王發消息前,先把他的公鑰交給小王,如果趙總要給小王發消息了,那趙總先将要發送的消息原文使用單向Hash函數生成一個

數字摘要

,然後使用他的私鑰對生成的數字摘要進行加密(也就是簽名),得到

數字簽名

,然後把

原文

數字簽名

進行打包,發送給小王。小王收到資訊之後,先将打包資訊分成兩部分:

數字簽名

和原文,然後使用王總的公鑰對

數字簽名

進行解密,如果能解密出來,則會得到一個

數字摘要1

,且可以證明這個資訊是王總發過來的,這個時候小王還不能确定原文是不是被人篡改過,小王需要将原文使用和王總約定好的單向Hash函數對原文進行加密,生成一個

數字摘要2

,然後小王對這兩個數字摘要進行對比,看一下值是否相等,如果相等,則說明原文沒有被篡改過。這就是

數字簽名

的整個工作流程,

數字簽名

實作 了

完整性校驗

身份驗證

功能。

3.2 數字信封

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

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

​ ​ ​ ​ ​ ​ ​ 既然如此,我們能不能設計一種技術,将這兩種加密技術的優點都結合起來,把他們的缺點屏蔽掉呢?這就誕生了數字信封技術。數字信封是指:将

對稱密鑰

通過

非對稱加密

的技術

分發對稱密鑰

的方法,即發送方

将原文用對稱密鑰加密

,然後将

對稱密鑰

接收方公鑰加密

之後發送給接收方。具體流程如下圖:

萬字長文帶你了解HTTPS原理1 HTTP協定2 幾個相關的技術4 HTTPS

數字信封

​ ​ ​ ​ ​ ​ ​ 從圖中可以看出,一開始的時候,趙總先使用一個随機數生成器,生成一個随機數作為對稱加密使用的對稱密鑰,然後使用這個對稱密鑰來加密要發給小王的原文,得到一串原文加密之後的密文,同時趙總使用小王的公鑰對

對稱密鑰

進行加密,得到一串對稱密鑰加密之後的密文,然後将原文加密之後的密文與對稱密鑰加密之後的密文組合在一起,打包發給小王。小王接收到了王總發給他的消息之後,先将打包好的資訊進行拆分,得到趙總發過來的

原文加密之後的密文

對稱密鑰加密之後的密文

,然後使用自己的密鑰對

對稱密鑰加密之後的密文

進行解密,得到

對稱密鑰

,然後使用這個對稱密鑰對

原文加密之後的密文

進行解密,得到原文。這就是數字信封的工作流程,數字信封技術是結合了

對稱加密技術

非對稱加密技術

兩種技術的一個具體實作,它綜合了性能與安全性的考慮。如果單單使用非對稱加密的話,它的速度會很慢,如果隻使用對稱加密,那在密鑰的分發過程中,就存在被竊聽的風險。

3.3 CA機制

​ ​ ​ ​ ​ ​ ​ 經過前面的讨論,你是不是覺得有了數字信封,就可以完美的實作加密的安全通信了,遺憾的是,事實并非如此,還記得我們前面介紹的資訊篡改嗎?如果在小王擷取趙總的公鑰過程中,資訊被篡改了,那這個時候,小王拿到的公鑰就是黑客給他的

假公鑰

,這時,如果小王用

假公鑰

加密消息,黑客就可以對這個加密的密文進行解密了,在這種情況下,消息也無法保證機密性,而且即使趙總拿到了小王用

假公鑰

加密的密文,趙總也無法對其進行解密。

萬字長文帶你了解HTTPS原理1 HTTP協定2 幾個相關的技術4 HTTPS

公鑰篡改

​ ​ ​ ​ ​ ​ ​ 是以,為了防止出現這種情況,就需要引入CA機制,CA就是一個證書服務機構,專門給我們頒發證書的,可以了解為類似

國家教育部

一樣的權威機構,它給我們頒發的證書(比如:四六級證書),我們所有人都是信任并認可的。當我們使用公鑰加密機制時,我們去找CA機構給我們頒發一個證書,這個證書是使用了

CA機構的私鑰

來進行了加密(也就是簽名)的。而為了保證CA機構的公鑰在傳輸過程中被人篡改,我們直接把傳輸過程給砍掉,直接把CA機構内置到作業系統裡面,這樣就黑客就無法在傳輸過程中對CA機構的公鑰進行篡改了,我們可以在Windows系統中,同時按住Windows + R鍵,在彈出的視窗中輸入

certmgr.msc

,就可以看到如下圖所示的頁面了。

萬字長文帶你了解HTTPS原理1 HTTP協定2 幾個相關的技術4 HTTPS

作業系統的證書

​ ​ ​ ​ ​ ​ ​ 為了友善了解,我們畫圖說明一下引入了CA機構後的公鑰分發流程,圖中的小王可以了解為我們的作業系統,趙總則是對應着伺服器,具體如下圖:

萬字長文帶你了解HTTPS原理1 HTTP協定2 幾個相關的技術4 HTTPS

引入了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原理1 HTTP協定2 幾個相關的技術4 HTTPS

HTTPS原理

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

繼續閱讀