來源丨經(jīng)授權(quán)轉(zhuǎn)自 一楓說碼(ID:yifengTalking) 作者丨一楓說碼
1. 不安全的 HTTP 近些年來,,越來越多的網(wǎng)站使用 HTTPS 協(xié)議進(jìn)行數(shù)據(jù)傳輸,,原因在于 HTTPS 相較于 HTTP 能夠提供更加安全的服務(wù)。 很多瀏覽器對于使用 HTTP 協(xié)議的網(wǎng)站會加上『警告』的標(biāo)志表示數(shù)據(jù)傳輸不安全,,而對于使用 HTTPS 協(xié)議的網(wǎng)站會加上一把『鎖』標(biāo)志表示數(shù)據(jù)傳輸安全,。 為什么 HTTP 協(xié)議不安全呢?主要表現(xiàn)在以下三個方面:
HTTPS 是如何解決以上安全性問題的呢?主要方法如下所示:
2. 加密算法
為了防止傳輸數(shù)據(jù)被黑客所竊聽,,客戶端與服務(wù)器之間需要對數(shù)據(jù)進(jìn)行加解密處理,。 發(fā)送方使用加密算法將 一般來說,,加密算法分為兩大類,,對稱加密和非對稱加密。
(1)對稱加密對稱加密算法中加密和解密的鑰匙是同一把,,稱之為密鑰。 凱撒密碼是一種較為簡單的對稱加密算法,,可用于對英語文本進(jìn)行加解密,。其主要思想是:將明文中的每個字母按照字母表所在位置右移 K 位,得到密文(允許回繞),。 舉個例子,設(shè) K = 2,,那么明文中的字母 'a' 用字母 'c' 代替,,字母 'z' 用 字母 'b' 代替。此時 K = 2 就是對稱加密算法中的密鑰,。 這種方式的缺點(diǎn)在于:每個字母經(jīng)過加密后只有唯一的密文表示,,如果黑客收集了很多數(shù)據(jù)后進(jìn)行統(tǒng)計(jì)分析,很可能就破解了加密手段,。 更好的方式是采用多個凱撒密碼 K 輪詢進(jìn)行加密,,比如位置為奇數(shù)的字母采用密鑰 K = 2 加密,,位置為偶數(shù)的字母采用密鑰 K = 3 加密。 然而凱撒密碼只能加密英文文本,,若想要加密所有字符,,可以采用分組加密的方式。 我們知道任何數(shù)據(jù)在計(jì)算機(jī)中實(shí)際存儲的是 0/1 比特的組合,。分組加密的主要思想是:將要加密的報文處理為 K 比特的分組,,每個分組通過一對一的映射表進(jìn)行加密。 舉個例子,,設(shè) K = 3,,映射表如下圖,那么報文 010110001111 將會被加密為 101000111001,。此時 K=3 以及映射表就是對稱加密算法中的密鑰,。 與前面采用多個凱撒密碼 K 作為密鑰的方式一樣,為了增加破解的難度,,一種更好的方式是采用多個映射表,,輪詢對數(shù)據(jù)進(jìn)行加密。 計(jì)算機(jī)網(wǎng)絡(luò)中常用的對稱加密算法有:DES,、3DES,、AES 等,都屬于分組加密算法,。 (2)非對稱加密非對稱加密算法中加密和解密的鑰匙不同,,分別稱為公鑰和私鑰。其特點(diǎn)在于:
為什么有了對稱加密后還會出現(xiàn)非對稱加密呢,? 原因在于對稱加密的前提是通信雙方需要商量出一個密鑰,而商量密鑰的時候傳輸?shù)氖敲魑?,如果此密鑰被黑客所截獲,,即使后面的報文進(jìn)行了加密,黑客也可以通過此密鑰進(jìn)行解密! 非對稱加密的一個特點(diǎn)是:公鑰加密,,只有私鑰可以解密,。那么就無需像對稱加密那樣提前協(xié)商好密鑰。通信雙方可以直接將自己的公鑰發(fā)送給另一方,,這個公鑰即使黑客知道也無所謂,,當(dāng)一方用此公鑰加密后,即使黑客截獲了報文,,也無法用公鑰解密,,只有擁有私鑰的另一方才能解密成功! 計(jì)算機(jī)網(wǎng)絡(luò)中常用的非對稱加密算法有:RSA,、 ECDHE 等,。 相較于對稱加密,非對稱加密算法更加復(fù)雜難懂,,數(shù)學(xué)推理較多,,如果對具體算法感興趣的,可以看一下阮一峰的兩篇文章:RSA 算法原理(一)和 RSA 算法原理(二),。 https://www./blog/2013/06/rsa_algorithm_part_one.html http://www./blog/2013/07/rsa_algorithm_part_two.html (3)混合加密前面提到,,對稱加密算法需要提前協(xié)商出密鑰,而協(xié)商的過程用的是明文(因?yàn)檫€沒有密鑰),,如果黑客截獲了明文密鑰,,那么之后即使加密了,黑客也可以用密鑰進(jìn)行解密,,此時就無安全性可言了,! 非對稱加密算法解決了此問題,但是其存在大量的指數(shù)運(yùn)算,,加密速度非常慢,!而對稱加密算法的加密速度非常快,,一般是非對稱加密算法的 100-10000 倍,! 那能不能將二者綜合起來,使得數(shù)據(jù)傳輸不僅安全且高效呢,?答案是肯定的,!HTTPS 采用混合加密方式,既采用對稱加密,,也采用非對稱加密,。 對稱加密算法的弱點(diǎn)在于協(xié)商密鑰的過程采用明文不安全,存在密鑰泄漏的可能,,那么我們是不是可以不采用明文,而是采用非對稱加密算法來協(xié)商此密鑰,,之后傳輸數(shù)據(jù)時再采用對稱加密算法進(jìn)行加密,。 也就是說,,用非對稱加密算法傳輸密鑰,用對稱加密算法傳輸實(shí)際數(shù)據(jù),。此密鑰一般稱為
3. 摘要算法
摘要算法也稱為哈希算法,其輸入為任意數(shù)據(jù),,輸出為固定長度的字符串(稱為摘要),。主要特點(diǎn)如下:
舉個例子:如果將數(shù)據(jù)的比特流每 8 個比特進(jìn)行分組(不足的補(bǔ)零),然后將所有分組進(jìn)行按位 如果兩個輸入數(shù)據(jù)經(jīng)過摘要算法得到的輸出摘要一致,,則稱為出現(xiàn)了哈希碰撞,。一個好的摘要算法出現(xiàn)哈希碰撞的概率非常低,而且非常難以通過輸出猜測輸入的內(nèi)容,! 計(jì)算機(jī)網(wǎng)絡(luò)中常用的摘要算法有:MD5,、SHA-1、SHA-256 等,。 為了防止傳輸數(shù)據(jù)被黑客所篡改,,發(fā)送方除了發(fā)送實(shí)際數(shù)據(jù)外,還利用摘要算法得到數(shù)據(jù)的一個 接收方收到數(shù)據(jù)后,利用同樣的摘要算法再次得到數(shù)據(jù)的 小伙伴們很容易看出來上述方式存在明顯缺陷,,如果黑客不僅篡改了數(shù)據(jù),而且同時篡改了摘要,,接收方不就無法判斷數(shù)據(jù)是否被篡改了嗎,? 為了防止這種情況的發(fā)生,發(fā)送方與接收方必須有一個只有二者知道的,,而黑客不能知道的東西,,比如對稱加密的 有了 數(shù)據(jù)和鑒別密鑰級聯(lián)后經(jīng)過摘要算法所生成的摘要有個專用名字,,稱為報文鑒別碼,,簡稱 MAC。 為了進(jìn)一步提升安全性,,實(shí)際上客戶端和服務(wù)器將使用不同的
4. 數(shù)字證書
前面提到 HTTPS 采用非對稱加密算法傳輸 但是萬一服務(wù)器的公鑰是被黑客偽造的呢,?比如經(jīng)典的『中間人攻擊』問題:
此時,客戶端與服務(wù)器的通信再無安全性可言,!中間人不僅能夠竊聽到消息內(nèi)容,,還能夠進(jìn)行篡改! 客戶端如何知道自己所擁有的公鑰是來自于正規(guī)網(wǎng)站而不是中間人呢,?這時候就需要數(shù)字證書了,! 數(shù)字證書的概念就像是我們的身份證一樣,專門用于驗(yàn)證通信實(shí)體的身份,。咱們的身份證是去派出所申請的,,而數(shù)字證書則需要向認(rèn)證中心(Certification Authority,CA)申請,,而且是需要收費(fèi)的,! 通過數(shù)字證書解決中間人攻擊的具體過程為:
瀏覽器如何得到認(rèn)證中心的公鑰呢,?萬一此公鑰是被偽造的呢,?為了防止套娃,實(shí)際電腦操作系統(tǒng)中會內(nèi)置這些認(rèn)證中心的公鑰,!因而無需擔(dān)心認(rèn)證中心公鑰被偽造的問題,。 Chrome 瀏覽器一旦發(fā)現(xiàn)一個網(wǎng)站數(shù)字證書無效,就會生成如下界面進(jìn)行提示,,如果用戶強(qiáng)制訪問,,則存在一定的風(fēng)險。 5. SSL/TLS 握手 根據(jù)前面所述,,進(jìn)行一下小結(jié):
那么 HTTPS 具體是怎么做的呢,?通信雙方在什么時候協(xié)商 HTTPS 比 HTTP 多的那個『S』就是指 SSL/TLS 協(xié)議。 在 HTTPS 協(xié)議中,,當(dāng)客戶端與服務(wù)器通過三次握手建立 TCP 連接之后,,并不會直接傳輸數(shù)據(jù),,而是先會經(jīng)過一個 SSL/TLS 握手的過程,用于協(xié)商 下面通過 Wireshark 抓包,,具體講一下 SSL/TLS 1.2 四次握手的過程,。 第一次握手 客戶端向服務(wù)器發(fā)起加密通信請求 ,內(nèi)容主要包括:
第二次握手 服務(wù)器收到客戶端加密通信請求后,,向客戶端發(fā)出響應(yīng),,內(nèi)容主要包括:
第三次握手 客戶端收到服務(wù)器的回應(yīng)之后,,會驗(yàn)證其數(shù)字證書是否合法(驗(yàn)證方法在數(shù)字證書小節(jié)中有說明),,如果證書合法,則進(jìn)行第三次握手,,內(nèi)容主要包括:
第四次握手 服務(wù)器收到客戶端的消息后,利用自己的 之后進(jìn)行第四次握手,,內(nèi)容主要包括:
至此,,整個 SSL/TLS 的握手階段全部結(jié)束,! 為什么第三、第四次握手要發(fā)送所有握手報文的摘要呢,? 主要原因是防止握手信息被篡改,。比如客戶端支持的密碼套件列表中,有些加密算法較弱,,有些加密算法較強(qiáng),,而此密碼套件是明文傳輸?shù)?,萬一黑客將此密碼套件列表進(jìn)行了修改,只留下一些安全性較低的加密算法,,那么服務(wù)器就只能從這些安全性較低的加密算法中選擇,,安全性大大降低。因此需要通過發(fā)送摘要的形式防止握手信息被篡改,。 為什么不直接發(fā)送一個主密鑰,,而是用兩個隨機(jī)數(shù)加一個前主密鑰重新生成一個主密鑰呢? 主要原因是防止連接重放,。如果沒有前面兩個隨機(jī)數(shù),,僅僅由客戶端生成一個主密鑰,并通過服務(wù)器 假如服務(wù)器是一個購物網(wǎng)站,,那么此連接重放會導(dǎo)致客戶端再一次下單,造成損失,。 而如果有了前兩個隨機(jī)數(shù),,即使黑客冒充客戶端想要連接重放,然而由于隨機(jī)數(shù)不同,,生成的密鑰則不同,,黑客重新發(fā)送的內(nèi)容將失效(服務(wù)器不能理解、完整性摘要也不對),。 最后,,用一張圖總結(jié) TLS 四次握手的過程。 1,、笑瘋,!外國小哥用ChatGPT完成80%工作,,同時打4份工 2、僅剩一位 73 歲開發(fā)者苦撐,!這個計(jì)算程序快要沒人維護(hù)了 3、“宇宙第一IDE”Visual Studio大改語法高亮,,更美觀、更方便閱讀 5,、夜深了,吃瓜了,,微信出BUG了?。ㄗ詈脛e點(diǎn)開) |
|
來自: 昵稱37581541 > 《電腦知識》