1. 程式人生 > >HTTPS加密那點事--輕松秒懂HTTPS非對稱加密

HTTPS加密那點事--輕松秒懂HTTPS非對稱加密

服務 背景 .... .com 找到 得到 對數 方便 技術

本文轉載自微信公眾號(苦逼的碼農),原文地址:

https://mp.weixin.qq.com/s/j-ss95ItMnWsZHLpUGBMkQ

用漫畫的形式解釋技術問題是不是有眼前一亮的感覺呢?以後自己的文章也會嘗試加一些漫畫的元素。

背景

不知道從哪天開始,一禪也陷入了編程這條道路.....

技術分享圖片技術分享圖片技術分享圖片

對稱加密

技術分享圖片

在每次發送真實數據之前,服務器先生成一把密鑰,然後先把密鑰傳輸給客戶端。之後服務器給客戶端發送真實數據的時候,會用這把密鑰對數據進行加密,客戶端收到加密數據之後,用剛才收到的密鑰進行解密。如圖:

技術分享圖片

當然,如果客戶端要給服務器發送數據,也是采用這把密鑰來加密,這裏為了方便,我采用單方向傳輸的形式。

技術分享圖片技術分享圖片技術分享圖片技術分享圖片

那萬一密鑰在傳輸的過程中被別人截取了怎麽吧?

例如:

假如服務器用明文的方式傳輸密鑰給客戶端,然後密鑰被中間人給捕獲了,那麽在之後服務器和客戶端的加密傳輸過程中,中間人也可以用他捕獲的密鑰進行解密。這樣的話,加密的數據在中間人看來和明文沒啥兩樣。

技術分享圖片技術分享圖片技術分享圖片技術分享圖片技術分享圖片

非對稱加密

技術分享圖片

這種方法就是,讓客戶端和服務器都擁有兩把鑰匙,一把鑰匙是公開的(全世界知道都沒關系),我們稱之為公鑰;另一把鑰匙則是保密的(只有自己本人才知道),我們稱之為私鑰。這且,用公鑰加密的數據,只有對應的私鑰才能解密;用私鑰加密的數據,只有對應的公鑰才能解密。

這樣,服務器在給客戶端傳輸數據的過程中,可以用客戶端明文給他的公鑰進行加密,然後客戶端收到後,再用自己的私鑰進行解密。客戶端給服務器發送數據的時候也一樣采取這樣的方式。這樣就能保持數據的安全傳輸了。畫個圖理解一下:

技術分享圖片技術分享圖片技術分享圖片技術分享圖片技術分享圖片技術分享圖片技術分享圖片技術分享圖片

處理方式就是結合 對稱加密+非對稱加密這兩種方式,我們可以用非對稱加密的方式來傳輸對稱加密過程中的密鑰,之後我們就可以采取對稱加密的方式來傳輸數據了。具體是這樣子的:

服務器用明文的方式給客戶端發送自己的公鑰,客戶端收到公鑰之後,會生成一把密鑰(對稱加密用的),然後用服務器的公鑰對這把密鑰進行加密,之後再把密鑰傳輸給服務器,服務器收到之後進行解密,最後服務器就可以安全著得到這把密鑰了,而客戶端也有同樣一把密鑰,他們就可以進行對稱加密了。

技術分享圖片技術分享圖片技術分享圖片

例如:

服務器以明文的方式給客戶端傳輸公鑰的時候,中間人截取了這把屬於服務器的公鑰,並且把中間人自己的公鑰冒充服務器的公鑰傳輸給了客戶端。

之後客戶端就會用中間人的公鑰來加密自己生成的密鑰。然後把被加密的密鑰傳輸給服務器,這個時候中間人又把密鑰給截取了,中間人用自己的私鑰對這把被加密的密鑰進行解密,解密後中間人就可以獲得這把密鑰了。

最後中間人再對這把密鑰用剛才服務器的公鑰進行加密,再發給服務器。如圖:

技術分享圖片

毫無疑問,在這個過程中,中間人獲取了對稱加密中的密鑰,在之後服務器和客戶端的對稱加密傳輸中,這些加密的數據對中間人來說,和明文沒啥區別。

技術分享圖片技術分享圖片技術分享圖片技術分享圖片技術分享圖片技術分享圖片

數字證書登場

在剛才的講解中,我們知道,之所以非對稱加密會不安全,是因為客戶端不知道這把公鑰是否是服務器的,因此,我們需要找到一種策略來證明這把公鑰就是服務器的,而不是別人冒充的。

解決這個問題的方式就是使用數字證書,具體是這樣的:

我們需要找到一個擁有公信力、大家都認可的認證中心(CA)。

服務器在給客戶端傳輸公鑰的過程中,會把公鑰以及服務器的個人信息通過Hash算法生成信息摘要。如圖

技術分享圖片

為了防止信息摘要被人調換,服務器還會用CA提供的私鑰對信息摘要進行加密來形成數字簽名。如圖:

技術分享圖片

並且,最後還會把原來沒Hash算法之前的個人信息以及公鑰 和 數字簽名合並在一起,形成數字證書。如圖

技術分享圖片

當客戶端拿到這份數字證書之後,就會用CA提供的公鑰來對數字證書裏面的數字簽名進行解密來得到信息摘要,然後對數字證書裏服務器的公鑰以及個人信息進行Hash得到另外一份信息摘要。最後把兩份信息摘要進行對比,如果一樣,則證明這個人是服務器,否則就不是。如圖:

技術分享圖片

這樣,就可以保證服務器的公鑰安全著交給客戶端了。

技術分享圖片技術分享圖片

其實,(有些)服務器一開始就向認證中心申請了這些證書了(有沒有看過沒有證書的網站在地址欄會被標出警告?),而客戶端是,也會內置這些證書。如圖:

技術分享圖片

當客戶端收到服務器傳輸過來的數據數字證書時,就會在內置的證書列表裏,查看是否有解開該數字證書的公鑰,如果有則...,如果沒有則....

技術分享圖片技術分享圖片技術分享圖片

希望通過這種漫文的方式,能夠讓你更加輕松的讀懂某些知識。

HTTPS加密那點事--輕松秒懂HTTPS非對稱加密