作為一名ABC搬運工,我相信很多人都知道Https,也都知道它是用來保證通信安全的,但是如果你沒有深入了解過Https,可能并不知道它是如何保證通信安全的。我也是借着這次機會,和大家分享下我深入了解的一個過程。
本文主要帶着以下幾個問題進行探讨:
1、什麼是Https?
2、Https和Http有什麼差別?
3、Https是如何保證通信安全的,它解決了哪些問題?
1.離不開的Https基礎理論
HTTPS是以安全為目标的 HTTP 通道,在HTTP的基礎上通過傳輸加密和身份認證保證了傳輸過程的安全性。
通過上面的定義,我們關注到兩點:傳輸加密、身份認證。那我們先來了解下Https中将要用到的加密技術和認證技術。
1)對稱加密
加密資料,需要秘鑰對(加密秘鑰和解密秘鑰),對稱加密很容易了解,即:通信雙方分别持有的加密秘鑰和解密秘鑰是一樣的。
2)非對稱加密
非對稱加密從字面上了解,即:通信雙方分别持有的加密秘鑰和解密秘鑰是不一樣的。我們将私人持有的秘鑰稱為私鑰,将公開的允許大多數人持有的秘鑰稱為公鑰,現實場景中,通常是使用公鑰加密通信資料,然後私鑰解密保證資料安全性。
3)數字簽名
保證資料傳輸的完整性和發送方可信。數字簽名是非對稱密鑰加密技術與數字摘要技術的應用,通常使用hash算法對資料進行數字摘要(生成一段唯一的資料辨別,該過程不可逆),然後使用私鑰對數字摘要進行加密;接收方收到資料後,使用發送放提供的公鑰對資料解密,確定資料是發送方發送的(如果不能解密,說明發送方并不是真實的),然後使用相同的hash算法對解密的資料進行數字摘要,比較前後兩次數字摘要資訊,如果相同則說明資料未被修改,進而確定資料完整性。
4)數字證書
數字證書又稱數字辨別,由使用者申請,證書簽證機關CA對其核實簽發,對使用者的公鑰認證。前面提到的幾種技術都是在發送方正确的情況下所做的加密認證技術,然而當發送方本身就是僞造的,那麼後續的加密認證必然沒有意義。而證書簽證機構一般都是權威機構,通過其簽發的證書確定了發送方提供的公鑰是可信的。
上面的理論描述可能了解起來不是很直接,大家可以繼續跟着後面的分析過程,逐漸滲透了解。
2.和Http差別
Https和Http的差別,我們在這裡不做較長的描述,主要通過一張圖了解一下:

通過上圖我們可以直覺的發現,HTTPS是在HTTP的基礎上加了SSL安全協定層,通俗的了解HTTPS=HTTP+SSL,SSL安全協定保證了通信過程的安全性。
主要展現在以下幾方面:
1)資訊加密安全
2)資訊完整性
3)身份認證
3.如何保證通信安全
我們先來看下HTTP的一次資料通信過程。TCP建立連接配接和斷開連接配接的過程,這裡就不再描述了。
圖一
存在的安全性問題:
1)圖一過程①和②都有可能被黑客截取,使用者的資訊暴露,非常危險。
HTTPS為了解決這個問題,允許通信雙方共同約定一種加解密方式,即對稱加密技術,僅通信雙方知曉密鑰以確定傳輸資料的安全;可是依然存在一個問題:通行雙方如何互動這個密鑰呢?
于是又提出通過非對稱加密技術實作密鑰的互動,即服務端向用戶端提供自己的公鑰,然後用戶端通過公鑰加密秘鑰傳輸給服務端,服務端收到後使用私鑰解密,擷取密鑰,後續通信雙方通過該對稱密鑰進行通信。
圖二
2)圖二中的過程②,如果被黑客攔截會發生什麼?
黑客可以僞造成伺服器,将黑客自己的公鑰分發給用戶端,也就是說“伺服器”本身就是個假的,這樣的話圖二中過程③用戶端加密的密鑰就很容易被黑客擷取,顯然後續的通信過程一直被黑客監聽,資訊完全暴露。
HTTPS為了解決這個問題提出了“數字證書”,由于數字證書是權威機構頒發的,申請者需要送出很多資料稽核,正常情況下僞造者很難申請到證書,是以也就保證了服務端提供的公鑰是安全可信的。
圖三
3)圖三中的過程②頒發的證書,被黑客攔截篡改怎麼辦?
如果證書被黑客攔截了。雖然黑客拿着證書也沒啥用,但是萬一黑客搗亂把證書資訊篡改了,那麼用戶端接收後就根本不知道了,同樣存在安全隐患。
是以,CA機構在生成證書的時候就使用了“數字簽名”,保證了證書的完整性。
原理:CA機構使用Hash算法得到證書明文資訊的“資訊摘要”,然後使用自己的私鑰對“資訊摘要”加密,生成數字簽名一同放在數字證書中;當用戶端收到伺服器發送的證書時,可以通過證書中的Hash算法對證書資訊簽名得到“資訊摘要”,然後使用CA機構的公鑰對原證書中的簽名資訊解密,如果解密後的“資訊摘要”和自簽名得到的一緻,則說明沒問題。(CA機構一般都是權威性的,是以通常它的公鑰都是内置在用戶端系統中的)
4)同樣的問題,用戶端和服務端在通信過程中,雖然黑客沒有“會話密鑰”無法擷取真實的傳輸資訊,但是黑客可以“修改資料”,比如删除一段資訊,這樣通信雙方拿到資料後,并不知道資料被修改了。
HTTPS為了保證資料的完整性,同樣使用了“數字簽名”,使用的是HMAC算法進行簽名,保證了通行過程中的資訊完整性。
至此,HTTPS已經幫我們實作了通信雙方之間的安全通信。