為了保證我們的通訊能夠安全進行,可以試想出一種流程來保證通訊安全:
目前來看,這個思路是不是很完美。公鑰即使被中間人截獲以後也沒用,因為拿到公鑰也解密不出來到底雙方是用哪種演算法加密的。 但有個重大缺陷: 中間人可以將伺服器傳送的公鑰包進行掉包,客戶端怎麼知道這個公鑰是真的伺服器傳送的還是假的中間人給的非法公鑰呢?
那有沒有一種方式既可以安全的獲取公鑰,又能防止黑客冒充呢? 那就需要用到終極**了:ssl 證書申購了
具體步驟說明:
如上圖所示,伺服器傳送了乙個ssl證書給客戶端,ssl 證書中包含的具體內容有:
(1)證書的發布機構ca
(2)證書的有效期
(3)公鑰
(4)證書所有者
(5)簽名
客戶端在接受到服務端發來的ssl證書時,會對證書的真偽進行校驗,以瀏覽器為例說明如下:
(1)首先瀏覽器讀取證書中的證書所有者、有效期等資訊進行一一校驗;
(2)瀏覽器開始查詢作業系統中已內建的受信任的證書發布機構ca,與伺服器發來的證書中的頒發者ca比對,用於校驗證書是否為合法機構頒發;
(3)如果找不到,瀏覽器就會報錯,說明伺服器發來的證書是不可信任的;
(4)如果找到,那麼瀏覽器就會從作業系統中取出 頒發者ca 的公鑰,然後對伺服器發來的證書裡面的簽名進行解密;
(5)瀏覽器使用相同的hash演算法計算出伺服器發來的證書的hash值,將這個計算的hash值與證書中簽名做對比;
(6)對比結果一致,則證明伺服器發來的證書合法,沒有被冒充;
(7)此時瀏覽器就可以讀取證書中的公鑰,用於後續加密了;
所以通過傳送ssl證書的形式,既解決了公鑰獲取問題,又解決了黑客冒充問題,一箭雙鵰,https加密過程也就此形成。
所以相比http,https 傳輸更加安全:
(1) 所有資訊都是加密傳播,黑客無法竊聽。
(2) 具有校驗機制,一旦被篡改,通訊雙方會立刻發現。
(3) 配備身份證書,防止身份被冒充。
1、對稱加密
有流式、分組兩種,加密和解密使用的金鑰是相同的(例如:des、aes-gcm、chacha20-poly1305等)。也就是說,加密和解密使用的是同乙個金鑰。因此,對稱加密演算法要保證安全性的話,金鑰要做好保密。只能讓使用的人知道,不能對外公開。因為對稱加密演算法相比非對稱加密演算法來說,效率要高得多,效能也好,所以互動的場景下多用對稱加密。
2、非對稱加密加密使用的金鑰和解密使用的金鑰是不相同的,分別稱為:公鑰、私鑰,公鑰和演算法都是公開的,私鑰是保密的。非對稱加密演算法效能較低,但是安全性超強,由於其加密特性,非對稱加密演算法能加密的資料長度也是有限的。 例如:rsa、dsa、ecdsa、 dh、ecdhe。
3、雜湊演算法
將任意長度的資訊轉換為較短的固定長度的值,通常其長度要比資訊小得多,且演算法不可逆。 例如:md5、sha-1、sha-2、sha-256 等。
4、數字簽名
數字簽名技術是將摘要資訊用傳送者的私鑰加密,與原文一起傳送給接收者。接收者只有用傳送者的公鑰才能解密被加密的摘要資訊,然後用hash函式對收到的原文產生乙個摘要資訊,與解密的摘要資訊對比。如果相同,則說明收到的資訊是完整的,在傳輸過程中沒有被修改,否則說明資訊被修改過,因此數字簽名能夠驗證資訊的完整性。 數字簽名是個加密的過程,數字簽名驗證是個解密的過程。 普通數字簽名演算法有rsa、elgamal、fiat-shamir、guillou- quisquarter、schnorr、ong-schnorr-shamir數字簽名演算法、des/dsa,橢圓曲線數字簽名演算法和有限自動機數字簽名演算法等。
https使用ca證書的傳輸方式就是使用了數字簽名,非對稱加密,對稱加密等混合加密技術。
說明:
(1)看藍色的部分是tcp鏈結。所以https的加密層也是在tcp之上的。
(2)客戶端首先發起clienthello訊息。包含乙個客戶端隨機生成的random1 數字,客戶端支援的加密演算法,以及ssl資訊。
(3)伺服器收到客戶端的clienthello訊息以後,取出客戶端法發來的random1數字,並且取出客戶端發來的支援的加密演算法, 然後選出乙個加密演算法,並生成乙個隨機數random2,傳送給客戶端serverhello讓客戶端對伺服器進行身份校驗,服務端通過將自己的公鑰通過數字證書的方式傳送給客戶端。
(4)客戶端收到服務端傳來的證書後,先從 ca 驗證該證書的合法性,驗證通過後取出證書中的服務端公鑰,再生成乙個隨機數 random3,再用服務端公鑰非對稱加密 random3 生成 premaster key。並將premaster key傳送到服務端。
(5)服務端通過私鑰將premaster key解密獲取到random3,此時客戶端和伺服器都持有三個隨機數random1 random2 random3,雙方在通過這三個隨即書生成乙個對稱加密的金鑰.雙方根據這三個隨即數經過相同的演算法生成乙個金鑰,而以後應用層傳輸的資料都使用這套金鑰進行加密。 change cipher spec finished:告訴客戶端以後的通訊都使用這一套金鑰來進行。
具體參考:
網路協議 HTTP與HTTPS
https的身份認證機制,如何證明我是我?我知道某帶密碼門鎖房間的密碼,如何證明我有這個密碼呢?有以下兩種方式 我把密碼告訴你,你用密碼開啟該房間的鎖。我知道該房間內有某一物品,我用密碼開啟房間的們,然後把物品拿出來給你看。方式 的結果是密碼洩露了,方式 是零知識證明,他指的是證明者能夠在不向驗證者...
網路協議 HTTPS(3)SSL TSL協議
前面的 網路協議 http協議 我們介紹了http協議,然後又寫了幾篇關於https的預備知識的文章,現在開始正式介紹https。在http請求過程中,客戶端與服務端之前沒有進行身份確認,而且傳輸的資料都沒有加密處理,所以很容易被劫持和篡改。基於http協議的這些弊端,後面就出現了https 嚴格的...
https協議 什麼是HTTPS協議?
在我們平常上網的時候我經常接觸的 應該大部分都是 或者我們知道讓他是乙個超文字傳輸協議。那麼https是個什麼?雖然http和這個https兩者只差乙個s,但是本質是大不相同的,他們是兩種不同的網路傳輸協議。千萬不要搞混淆了。http協議通過請求 響應的方式,在客戶端和服務端之間進行通訊。這一切看起...