【面試經(jīng)典題】
前言:
HTTP最初的設(shè)計(jì)就是用于數(shù)據(jù)的共享和傳輸,并沒有考慮到數(shù)據(jù)的安全性,如竊聽風(fēng)險(xiǎn),篡改風(fēng)險(xiǎn)和冒充風(fēng)險(xiǎn)。HTTPS是在 HTTP 的基礎(chǔ)上引入了一個(gè)加密層。HTTPS通過數(shù)據(jù)加密,數(shù)據(jù)完整性檢驗(yàn)和身份認(rèn)證有效的保證了數(shù)據(jù)傳輸?shù)陌踩?。HTTP默認(rèn)端口號(hào)80,HTTPS默認(rèn)端口號(hào)是443。是接下來說說這些方法具體是咋實(shí)現(xiàn)的。
HTTPS:這里的S指的是TLS(前身是SSL,后來更名了)傳輸層安全協(xié)議。可以理解為HTTPS=HTTP+TLS。TLS是一種安全性協(xié)議。旨在保障通信數(shù)據(jù)的保密性,完整性,真實(shí)性。TLS位于應(yīng)用層和傳輸層之間。?
TLS的發(fā)展歷程
? ??
HTTP為什么不安全?
互聯(lián)網(wǎng)上任何數(shù)據(jù)包的傳輸,都需要經(jīng)過許許多多的網(wǎng)絡(luò)設(shè)備如路由器等,如果其中一臺(tái)設(shè)備是惡意的,或者被惡意的人劫持(如黑客),那傳輸?shù)臄?shù)據(jù)就可能會(huì)被竊取或者修改。并且HTTP是明文傳輸?shù)?,傳輸?shù)臄?shù)據(jù)沒有進(jìn)行任何加密。數(shù)據(jù)就會(huì)被輕易竊取。并且數(shù)據(jù)沒有經(jīng)過任何的校驗(yàn),要是數(shù)據(jù)被篡改,也無法感知。并且通信雙方也沒有進(jìn)行身份認(rèn)證,就會(huì)存在通信對(duì)象可能不是目標(biāo)對(duì)象的情況,如黑客冒充成客戶端或者服務(wù)器端與對(duì)方進(jìn)行交互。
綜上所述:HTTP存在以下三種安全風(fēng)險(xiǎn):
- 竊聽風(fēng)險(xiǎn)
- 篡改風(fēng)險(xiǎn)
- 冒充風(fēng)險(xiǎn)
HTTPS的工作過程
對(duì)于如何解決第一種風(fēng)險(xiǎn),我們首先能想到的是進(jìn)行加密,加密有兩種,對(duì)稱加密和非對(duì)稱加密。
1.使用對(duì)稱加密
這種對(duì)稱加密使用同一種秘鑰,秘鑰是由客戶端這邊生成的,不同的客戶端秘鑰不同,然后向服務(wù)器發(fā)送,并于服務(wù)器約定使用這個(gè)秘鑰傳輸。秘鑰既可以加密也可以解密,雖然數(shù)據(jù)傳輸進(jìn)行了加密,但秘鑰在傳輸過程中并沒有被加密,就會(huì)容易被截獲,截獲的人就可以通過秘鑰解密數(shù)據(jù),造成風(fēng)險(xiǎn)。
2.使用非對(duì)稱加密
如上圖所示,加密過程共有四步:?
- 首先瀏覽器向服務(wù)器發(fā)送獲取公鑰的請(qǐng)求,
- 服務(wù)器收到請(qǐng)求返回自己的公鑰,
- 瀏覽器收到公鑰后,將請(qǐng)求數(shù)據(jù)和公鑰通過加密算法進(jìn)行加密生成密文,然后發(fā)送給服務(wù)器。
- 服務(wù)器收到密文后,用私鑰和密文通過解密算法獲得明文數(shù)據(jù),然后服務(wù)器又將響應(yīng)數(shù)據(jù)使用私鑰加密后發(fā)給瀏覽器,瀏覽器收到密文再通過公鑰進(jìn)行解密。
這種加密顯然優(yōu)于第一種,非對(duì)稱加密使用一對(duì)秘鑰,公鑰和私鑰,公鑰是公開的,私鑰是僅服務(wù)器擁有的。非對(duì)稱加密的特點(diǎn)是通過公鑰加密的密文必須由私鑰解密,通過私鑰加密的密文必須由公鑰解密。但是純使用非對(duì)稱加密這種也有缺點(diǎn),一是效率太慢(因?yàn)樯婕暗綇?fù)雜的數(shù)學(xué)運(yùn)算)
二是傳輸過程中公鑰是可以被截獲的,并且第四步服務(wù)器返回響應(yīng)是通過私鑰加密的,截獲公鑰的不法分子就能夠通過公鑰解密。
3.使用非對(duì)稱加密+對(duì)稱加密
如上圖所示,非對(duì)稱加密過程共有五步:
- 瀏覽器向服務(wù)器發(fā)起獲取非對(duì)稱加密公鑰的請(qǐng)求。
- 服務(wù)器收到請(qǐng)求返回自己的公鑰。
- 瀏覽器將對(duì)稱加密秘鑰使用公鑰加密后發(fā)送給服務(wù)器,服務(wù)器收到密文使用自己的私鑰解密后獲得對(duì)稱加密秘鑰。
- 瀏覽器將請(qǐng)求數(shù)據(jù)使用對(duì)稱加密秘鑰加密后發(fā)送給服務(wù)器。
- 服務(wù)器使用剛才獲得的對(duì)稱秘鑰對(duì)密文進(jìn)行解密,得到請(qǐng)求數(shù)據(jù)。服務(wù)器根據(jù)請(qǐng)求處理數(shù)據(jù),服務(wù)器將響應(yīng)數(shù)據(jù)使用對(duì)稱秘鑰加密后發(fā)給瀏覽器,瀏覽器使用對(duì)稱秘鑰解密后獲得響應(yīng)。
非對(duì)稱加密主要用來傳輸對(duì)稱加密的秘鑰,而不是傳輸業(yè)務(wù)數(shù)據(jù)。傳輸業(yè)務(wù)數(shù)據(jù)交給對(duì)稱加密。這樣就算不法分子能夠拿到公鑰,也無濟(jì)于事。我們的目標(biāo)是讓對(duì)稱加密的秘鑰安全的發(fā)送給服務(wù)器。發(fā)送過去后,剩下的數(shù)據(jù)傳輸就全部用秘鑰進(jìn)行加密解密??偟膩碚f就是兩種加密方式的加密對(duì)象不同。作用時(shí)間不同。這樣做就可以有效防止竊聽風(fēng)險(xiǎn)。但還不夠,魔高一尺道高一丈。如果黑客冒充服務(wù)器并偽造公鑰該咋辦?
非對(duì)稱加密為什么要引入對(duì)稱加密?
因?yàn)榉菍?duì)稱加密/解密,運(yùn)算成本是比較高的,運(yùn)算速度也比較慢;而對(duì)稱加密運(yùn)算成本低,速度快。上文中單單使用對(duì)稱加密不安全是因?yàn)槊罔€在傳輸過程中沒有加密,容易被截獲。即使用對(duì)稱加密的要害是傳輸秘鑰。如果我們使用非對(duì)稱加密進(jìn)行傳輸對(duì)稱秘鑰,然后在后面的數(shù)據(jù)傳輸中均使用對(duì)稱加密。這樣相互配合,就可以在保證安全的同時(shí),效率也提高。如果整個(gè)過程都是用非對(duì)稱加密傳輸,傳輸效率會(huì)大打折扣。
3.1詳解冒充風(fēng)險(xiǎn)
不法分子是如何冒充的?
客戶端向服務(wù)器請(qǐng)求公鑰后,服務(wù)器會(huì)返回一個(gè)公鑰,但在這個(gè)中間,公鑰存在被截獲的風(fēng)險(xiǎn),黑客這邊提前自己也生成一對(duì)公鑰和私鑰,截獲后黑客就可以將公鑰替換成自己的。但是客戶端不知道,就會(huì)拿著黑客提供的公鑰進(jìn)行加密,然后傳給服務(wù)器,中間又會(huì)被黑客截獲,由于公鑰是黑客的,那自然黑客手中的秘鑰就能對(duì)它解密,這個(gè)過程中黑客就獲得了秘鑰,這時(shí)通信雙方并沒有正式進(jìn)行數(shù)據(jù)通信,黑客繼續(xù)偽裝,使用之前截獲的服務(wù)器的公鑰(不是偽造的,如果這里偽造,數(shù)據(jù)傳到服務(wù)器那邊是解不開的)對(duì)秘鑰加密,發(fā)送給服務(wù)器。服務(wù)器使用私鑰解密,于是雙方就約定使用這個(gè)秘鑰進(jìn)行數(shù)據(jù)傳輸了,殊不知秘鑰已經(jīng)被黑客截獲了。后續(xù)黑客只需要通過秘鑰就能輕松地獲取數(shù)據(jù)了。這個(gè)過程的關(guān)鍵是秘鑰被黑客給截取了。
4.使用證書機(jī)制
解決上述冒充問題的辦法就是進(jìn)入公證機(jī)構(gòu)。在客戶端和服務(wù)器起初建立連接時(shí),服務(wù)器就給客戶端返回一個(gè)證書。這個(gè)證書就好比人的身份證,用來作為網(wǎng)站的身份標(biāo)識(shí)。而每搭建一個(gè) HTTPS 網(wǎng)址時(shí)都需要在認(rèn)證機(jī)構(gòu)申請(qǐng)一個(gè)證書。
證書含有的重要信息:
- 證書發(fā)布機(jī)構(gòu)
- 證書有效期
- 公鑰(服務(wù)器的公鑰)
- 證書所有者
- 簽名
即在搭建服務(wù)器時(shí),服務(wù)器會(huì)去公證機(jī)構(gòu)申請(qǐng)證書并提交一系列材料。認(rèn)證成功后,公證機(jī)構(gòu)會(huì)給這個(gè)服務(wù)器頒發(fā)證書(證書中就含有公鑰)。接下來每次客戶端訪問服務(wù)器時(shí),都會(huì)先請(qǐng)求服務(wù)器的證書,服務(wù)器返回證書給客戶端。接下來分兩步進(jìn)行檢驗(yàn):
第一步:檢驗(yàn)證書是否合法
萬一證書是偽造的,校驗(yàn)證書方式有:
- 判定證書的有效期是否過期
- 判定證書的發(fā)布機(jī)構(gòu)是否受信任
- 判定證書是否被篡改(從系統(tǒng)中拿到該證書發(fā)布機(jī)構(gòu)的公鑰,對(duì)簽名解密,得到一個(gè) hash 值(稱為數(shù)據(jù)摘要),設(shè)為 hash1。然后計(jì)算整個(gè)證書的 hash 值,設(shè)為 hash2。對(duì)比 hash1 和 hash2 是否相等,如果相等,則說明證書是沒有被篡改過的)
證書檢驗(yàn)通過后,進(jìn)行檢驗(yàn)證書中的數(shù)據(jù)是否被篡改過。
第二步:檢驗(yàn)證書中數(shù)據(jù)是否被篡改
目的是為了檢驗(yàn)公鑰是否被修改過,進(jìn)行數(shù)字簽名(其實(shí)就是被加密后的校驗(yàn)和), 這里的校驗(yàn)和就是把證書中所有數(shù)據(jù)的每個(gè)字節(jié)帶入公式就會(huì)算出一個(gè)結(jié)果數(shù)字,這個(gè)數(shù)字就是校驗(yàn)和。為了防止該校驗(yàn)和又被修改,我們對(duì)校驗(yàn)和進(jìn)行了加密。這個(gè)加密是由公正機(jī)構(gòu)完成的,公證哪個(gè)機(jī)構(gòu)那邊也有一對(duì)公鑰和私鑰,其中公鑰分發(fā)給各個(gè)客戶端,私鑰用來加密校驗(yàn)和?,F(xiàn)如今我們的操作系統(tǒng)上已經(jīng)擁有許多知名認(rèn)證機(jī)構(gòu)的公鑰,客戶端收到證書并確認(rèn)證書無誤后,開始使用公鑰解密獲得檢驗(yàn)和(一串?dāng)?shù)字),同時(shí)客戶端這白牛也用相同的公式將證書中的數(shù)據(jù)進(jìn)行計(jì)算得出一個(gè)校驗(yàn)和,與解密后的校驗(yàn)和對(duì)比,以此來最終確認(rèn)證書有沒有被篡改過。通過后就可以開始進(jìn)一步傳輸秘鑰,傳輸數(shù)據(jù)了。解決冒充問題的關(guān)鍵就是驗(yàn)證這個(gè)證書中攜帶的服務(wù)器的公鑰是否被修改過。?
常見的計(jì)算校驗(yàn)和的算法有MD5 和 SHA,以下以 MD5 為例,介紹其特點(diǎn):
- 定長:無論多長的字符串,計(jì)算出來的 MD5 值都是固定長度(16字節(jié)版本或者32字節(jié)版本)
- 分散:源字符串只要改變一點(diǎn)點(diǎn),最終得到的 MD5 值都會(huì)差別很大
- 不可逆:通過源字符串生成 MD5 很容易,但是通過 MD5 還原成原串理論上是不可能的
由于 MD5 這樣的特性,因此可以認(rèn)為如果兩段數(shù)據(jù)的 MD5 值相同,則這兩段數(shù)據(jù)相同。
總結(jié):文章來源:http://www.zghlxwxcb.cn/news/detail-713066.html
- 對(duì)稱加密:由客戶端生成的對(duì)稱密鑰,用于對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行加密,需要將該對(duì)稱密鑰告知給服務(wù)器。
- 非對(duì)稱加密: 服務(wù)器給客戶端提供一個(gè)公鑰(私鑰自己持有),將公鑰傳發(fā)送給客戶端,客戶端使用公鑰對(duì)對(duì)稱密鑰進(jìn)行加密,將密文傳送給服務(wù)器。
-
證書機(jī)制: 通過第三方公證機(jī)構(gòu),向網(wǎng)站頒發(fā)證書,該證書里面就含有服務(wù)器的公鑰。客戶端首先向服務(wù)器請(qǐng)求證書,客戶端拿到證書后進(jìn)行校驗(yàn),如果證書合法并且證書里的數(shù)據(jù)沒有被篡改,就使用里面的公鑰對(duì)對(duì)稱密鑰進(jìn)行加密。
?
通過上面三種方式的結(jié)合,就可以保證傳輸過程中的安全了。文章來源地址http://www.zghlxwxcb.cn/news/detail-713066.html
到了這里,關(guān)于【計(jì)算機(jī)網(wǎng)絡(luò)】什么是HTTPS?HTTPS為什么是安全的?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!