作為一名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已經幫我們實現了通信雙方之間的安全通信。