Https原理剖析

2021-09-01 02:50:40 字數 1618 閱讀 6478

隨著網際網路的發展和普及,受眾人群越來越多,資訊保安的重要性也逐漸凸顯,其中網路傳輸安全是重要的一部分,目前絕大多數**和搜尋引擎已經從http改為https協議進行網路資料傳輸和訪問,https比http安全在哪呢?

2、用https的證書傳輸的資料是加密的,而http是明文的很容易被抓包

要了解https的通訊原理首先要了解幾個基本概念

1、對稱加密演算法(symmetric key algorithms):在對稱加密演算法中,加密使用的金鑰和解密使用的金鑰是相同的。也就是說,加密和解密都是使用的同乙個金鑰。如aes加密

2、非對稱加密演算法(asymmetric key algorithms):在非對稱加密演算法中,加密使用的金鑰和解密使用的金鑰是不相同的。前面所說的公鑰密碼體制就是一種非對稱加密演算法,他的公鑰和是私鑰是不能相同的,也就是說加密使用的金鑰和解密使用的金鑰不同,因此它是乙個非對稱加密演算法。如rsa加密

3、簽名:簽名就是在資訊的後面再加上一段內容,可以證明資訊沒有被修改過。一般是對資訊做乙個hash計算得到乙個hash值(hash不可逆)。在把資訊傳送出去時,把這個hash值加密後做為乙個簽名和資訊一起發出去。 接收方在收到資訊後,會重新計算資訊的hash值,並和資訊所附帶的hash值(解密後)進行對比,如果一致,就說明資訊的內容沒有被修改過,因為這裡hash計算可以保證不同的內容一定會得到不同的hash值,所以只要內容一被修改,根據資訊內容計算的hash值就會變化。

https通訊原理大體可以如下圖:

從上到下我們一步一步的解釋

1、客戶端對伺服器發起握手請求(hello,i am client 只是為了讓讀者更好理解,實際不會傳送字串,只是乙個連線請求而已)

2、伺服器返回數字證書,證書中包含加密演算法,公鑰,簽名等內容

3、客戶端驗證是否為真實的服務端,生成隨機數並用公鑰加密傳送給服務端

4、服務端用私鑰解密,得到明文並用私鑰加密,返回給客戶端,客戶端用公鑰解密出明文和傳送的明文作對比,一致則為真實的服務端。

這裡簡單解釋一下,由於像rsa這種非對稱加密,既可以用公鑰加密,私鑰解密,也可以用私鑰加密,公鑰解密,且公鑰加密只有對應私鑰才能解密,私鑰加密只有對應公鑰才能解密。公鑰一般會公布出去,私鑰會保留在服務端,不會讓其他人知道。3,4不為什麼能夠起到校驗服務端是否是真實客戶端呢?是因為私鑰都是保密的,如果是真實的服務端就能用私鑰解密出正確的明文,並對明文進行加密,返回給客戶端端,如果是冒充的,由於不知道私鑰,則無法解密出正確明文,發給客戶端的資訊自然也是不正確的

5、客戶端驗證了是服務端之後,會將對稱加密演算法(如aes)的秘鑰,以rsa加密演算法加密,傳給服務端。由於在上面已經驗證了服務端是真實的,且私鑰只有服務端有,所以即使此資訊被黑客劫持也不會造成資訊洩露,因為黑客不知道私鑰,無法解密

6、服務端接收到後通知客戶端接收成功,此時就可以用對稱加密的演算法進行加密的資料傳輸了

7,8、利用對稱加密演算法加密傳輸資料並進行資料傳輸

有童鞋看到這裡可能會說,怎麼沒看到簽名的使用,不是說好要先了解簽名的概念嗎?其實上面已經提到了,簽名是為了驗證內容是否被更改,所以應用都是在資料傳輸的時候,也就是7,8步上,客戶端傳送加密資料的時候會加乙個加密後的簽名,服務端驗證通過驗證這個簽名來確認資訊是否被修改。

epoll原理剖析

首先我們來定義流的概念,乙個流可以是檔案,socket,pipe等等可以進行i o操作的核心物件。不管是檔案,還是套接字,還是管道,我們都可以把他們看作流。之後我們來討論i o的操作,通過read,我們可以從流中讀入資料 通過write,我們可以往流寫入資料。現在假定乙個情形,我們需要從流中讀資料,...

NGINX原理剖析

nginx之所以能夠支援高併發,是由於它採用非同步 事件驅動的方式處理連線。nginx有乙個master process,負責載入配置檔案,繫結埠等特權操作 有cache manage process和cache loader process兩個程序負責硬碟快取的處理,在nginx啟動時,將硬碟的快...

next permutation原理剖析

最近刷leetcode的時候遇見next permutation這道題,感覺挺有意思的乙個題目,遞迴的方法是較簡單並且容易想到的,在網上搜了其餘的解法,就是std next permutation非遞迴解法,但是讓人不是很舒服的就是關於原理的部分,千篇一律的都是摘抄 stl原始碼剖析 也就是這樣的。...