雖然現在許多網站都會用到HTTP和HTTPS,但是大家極力倡導使用的卻是更為安全的HTTPS,今天我們就來了解一下HTTPS是如何保證數據傳輸的安全性的。本篇概要:1.HTTP的缺點2.HTTPS如何保證數據安全性3.對稱加密和非對稱加密4.HTTPS的請求過程5.如何防止數字證書被篡改6.單雙向認證
1
為什么說HTTP不安全?
HTTP本質上就是一個TCP連接,只不過協議規定了使用80端口,以及發送命令或數據的格式,而TCP本身是沒有加密的功能。致命的是,HTTP在數據傳輸過程中,數據就是以明文的方式傳輸的,由于數據沒有被加密,所以很容易出現數據竊聽、篡改或者是身份偽造的不安全的行為。
有什么優化的方法?
既然使用明文進行數據傳輸不安全,那我們可以嘗試一下對數據進行加密處理。比如,通信雙方可以約定一種算法,首先將需要發送的數據按照一定的規則進行加密,然后對方接收到消息后按照相同的規則進行解密。這個就是對稱加密的體現形式了。
所謂對稱加密,即原文和密文可使用一個相同的密鑰進行加密和解密,即使用同一把密匙對原文加密得到密文或者是對密文解密獲取到原文。其優點是加密解密效率較高。但是使用對稱加密有一個關鍵點,那就是這個對稱密鑰,應該如何來確定呢?在HTTP請求中,加密密鑰協商,還是個難題。
2
HTTPS如何保證數據安全的呢?
在HTTPS數據傳輸過程中對數據進行加密處理,HTTPS是使用對稱加密和非對稱加密、簽名算法(簽名算法不是用來做加密的)以及證書機制來對消息進行處理,以此達到一個安全的有效傳輸。HTTPS是基于HTTP的上層添加了一個叫做TLS的安全層,對數據的加密等操作都是在這個安全層中進行處理的,其底層還是應用的HTTP。HTTPS通信先是使用非對稱加密進行密鑰的協商,協商出一個對稱加密的密鑰,之后的通信則采用這個對稱密鑰進行對稱加密密文傳輸。因為非對稱加密其算法極其復雜,導致解密效率低下,而對稱加密效率則明顯高出百倍。在上面我們提到過,對明文使用同一把密鑰進行加密和解密是屬于對稱加密。那么非對稱加密又是怎樣的呢?
非對稱加密
非對稱加密,即原文加密和密文加密使用的是兩個不同的密鑰,一把稱之為公鑰,一把稱之為私鑰,使用公鑰加密的內容可以通過私鑰進行解密,同樣,使用私鑰加密的內容使用公鑰可以進行解密。公鑰和私鑰是相對而言的,通常而言,保留在己方不對外泄露稱之為私鑰,可公布公開的稱之為公鑰。
非對稱加密對明文進行加密和解密是使用的不同的密鑰。但是,我們在上面提過,在使用加密時,其難點就在于密鑰協商過程,那么,HTTPS是如何處理這個密鑰協商過程呢。
在這里,我們需要引入一個新的名詞:數字證書。
數字證書
所謂數字證書,就是一份類似于身份證一樣的網絡通信憑證,以證明所請求對象的身份信息不被篡改并且是真實有效的,當我們請求某個網站時,先去請求網站的數字證書,然后檢查證書的真實性和有效性,從而一步步進行身份驗證,具體過程會在后面進行圖解。
所謂證書,就是服務端從網站公證處備案申請的一個身份證這樣的一個東西,里面包含有有效期開始時間、結束時間、證書持有人、簽名以及最關鍵的持有人的公鑰信息等。通常情況下,我們會為服務端配置SSL證書,SSL證書是數字證書的一種,由受信任的數字證書頒發機構(簡稱CA)頒發,具有服務器身份驗證和數據傳輸加密的功能。就好比我們訪問億佰特網站,我們怎么知道我們訪問的億佰特網站是否是一個假的呢,所以我們通常在訪問時,先去獲取對方網站的證書信息,然后和本地瀏覽器載入的證書進行比較看是否是安全的。HTTPS通信在客戶端請求服務端時,先去獲取服務端的證書,然后將證書在本地進行對比校驗(通常瀏覽器中會內置很多證書,如上圖);當驗證通過時,則表示是一個安全的證書,否則瀏覽器狀態欄會提示“不安全”。
3
HTTPS的請求過程
在上面我們簡單介紹了一下HTTPS和數字證書,但是它們是如何來解決HTTP中存在的數據竊聽、數據篡改、身份偽造問題的呢?上圖是HTTPS簡單的請求模型,使用這個模型可以完美的解決上面提到的三個問題點。
在第一次請求時,客戶端先去請求服務端的數字證書,并且生成一個隨機數R1,將隨機數和自己支持的加密算法告訴服務端。服務端收到客戶端的請求后,選擇雙方共同支持的加密算法,并且生成新的隨機數R2,將服務器的數字證書及加密算法、隨機數一并返回給客戶端。
客戶端收到服務端的數字證書,然后使用瀏覽器內置的CA證書進行解密獲取到證書中的服務端的公鑰及服務端的認證信息,從而確保證書沒有被人篡改過。然后生成新的隨機數R3,使用服務端的公鑰對隨機數R3進行加密后返回給服務端并將隨機數R1、R2、R3組合成一串密鑰用作對稱加密用。
服務端收到客戶端加密后的隨機數R3,使用自己的私鑰對密文進行解密獲取到隨機數R3,組合R1、R2、R3獲取到一串密鑰(和客戶端一致);然后開始使用對稱加密進行通信。上述就是HTTPS對密鑰協商的過程,由于非對稱加密一方密匙加密后只能使用另一方密匙解密,所以在前兩次數據傳輸中即使被竊聽也不怕,因為在第三次傳遞隨機數R3時是使用公鑰加密的,只有服務端的私鑰才能解密,從而確保密鑰的安全性。
4
如何防止數字證書被篡改
在上面的請求模型中,如何防止客戶端返回的數字證書被篡改呢?我們在申請數字證書時,會提供我們的基本信息以及企業域名信息等,證書頒發機構CA會根據證書中的這些信息以及所提供的簽名算法對內容進行摘要,得到一個消息摘要(散列hash串),即使用Hash算法獲取到的一個唯一標識,然后CA機構會使用自己的私鑰對摘要進行加密,獲取到一個密文,即數字簽名,也叫做指紋;表示其唯一性。然后證書頒發機構對整個明文數字證書使用證書頒發機構CA自己的私鑰進行加密,得到數字證書。當數字證書中的內容被篡改時,使用Hash算法對內容進行計算獲取到新的摘要,只需要對比一下兩個摘要是否相同即可知道證書中的數據知否有被篡改。
當客戶端請求數據從瀏覽器端獲取到數字證書后,通過瀏覽器內置的CA證書中的公鑰對數字證書進行解密,獲取到明文數字證書(包含企業基本信息及服務端公鑰以及數字簽名),通過如上圖所示方式來判斷證書是否有被篡改。
單雙向認證
在上面的例子中,客戶端請求服務端獲取證書信息進行認證,這個就是單向認證,只是客戶端認證服務端,但是服務端并沒有認證客戶端的請求。HTTPS支持單向認證,也支持雙向認證。
雙向認證的情況通常比較少見,常見于銀行等領域,就像我們以前使用銀行的U盾,這就是一種雙向認證案例,還有就是在電腦上安裝支付寶的證書等;雙向認證比單向認證更加安全,但是需要對每一個客戶端都進行分配證書。
-
數據安全
+關注
關注
2文章
678瀏覽量
29926
發布評論請先 登錄
相關推薦
評論