<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          為什么使用HTTPS來(lái)確保安全性?

          共 3208字,需瀏覽 7分鐘

           ·

          2020-12-24 06:48

          ??Java大聯(lián)盟

          ? 幫助萬(wàn)千Java學(xué)習(xí)者持續(xù)成長(zhǎng)

          關(guān)注



          作者|mokeyWie

          r6a.cn/efZ2


          B 站搜索:楠哥教你學(xué)Java

          獲取更多優(yōu)質(zhì)視頻教程


          1. HTTP 協(xié)議

          在談?wù)?HTTPS 協(xié)議之前,先來(lái)回顧一下 HTTP 協(xié)議的概念。

          1.1 HTTP 協(xié)議介紹

          HTTP 協(xié)議是一種基于文本的傳輸協(xié)議,它位于 OSI 網(wǎng)絡(luò)模型中的應(yīng)用層。

          HTTP 協(xié)議是通過(guò)客戶(hù)端和服務(wù)器的請(qǐng)求應(yīng)答來(lái)進(jìn)行通訊,目前協(xié)議由之前的 RFC 2616 拆分成立六個(gè)單獨(dú)的協(xié)議說(shuō)明(RFC 7230、RFC 7231、RFC 7232、RFC 7233、RFC 7234、RFC 7235),通訊報(bào)文如下:

          請(qǐng)求
          POST http://www.baidu.com HTTP/1.1Host: www.baidu.comConnection: keep-aliveContent-Length: 7User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
          wd=HTTP
          響應(yīng)
          HTTP/1.1 200 OKConnection: Keep-AliveContent-Encoding: gzipContent-Type: text/html;charset=utf-8Date: Thu, 14 Feb 2019 07:23:49 GMTTransfer-Encoding: chunked
          <html>...html>

          1.2 HTTP 中間人攻擊

          HTTP 協(xié)議使用起來(lái)確實(shí)非常的方便,但是它存在一個(gè)致命的缺點(diǎn):不安全。

          我們知道 HTTP 協(xié)議中的報(bào)文都是以明文的方式進(jìn)行傳輸,不做任何加密,這樣會(huì)導(dǎo)致什么問(wèn)題呢?下面來(lái)舉個(gè)例子:

          1、小明在 JAVA 貼吧發(fā)帖,內(nèi)容為我愛(ài)JAVA:
          2、被中間人進(jìn)行攻擊,內(nèi)容修改為我愛(ài)PHP
          3、小明被群嘲(手動(dòng)狗頭)

          可以看到在 HTTP 傳輸過(guò)程中,中間人能看到并且修改 HTTP 通訊中所有的請(qǐng)求和響應(yīng)內(nèi)容,所以使用 HTTP 是非常的不安全的。

          1.3 防止中間人攻擊

          這個(gè)時(shí)候可能就有人想到了,既然內(nèi)容是明文那我使用對(duì)稱(chēng)加密的方式將報(bào)文加密這樣中間人不就看不到明文了嗎,于是如下改造:

          1、雙方約定加密方式
          2、使用 AES 加密報(bào)文

          這樣看似中間人獲取不到明文信息了,但其實(shí)在通訊過(guò)程中還是會(huì)以明文的方式暴露加密方式和秘鑰,如果第一次通信被攔截到了,那么秘鑰就會(huì)泄露給中間人,中間人仍然可以解密后續(xù)的通信:

          那么對(duì)于這種情況,我們肯定就會(huì)考慮能不能將秘鑰進(jìn)行加密不讓中間人看到呢?答案是有的,采用非對(duì)稱(chēng)加密,我們可以通過(guò) RSA 算法來(lái)實(shí)現(xiàn)。

          在約定加密方式的時(shí)候由服務(wù)器生成一對(duì)公私鑰,服務(wù)器將公鑰返回給客戶(hù)端,客戶(hù)端本地生成一串秘鑰(AES_KEY)用于對(duì)稱(chēng)加密,并通過(guò)服務(wù)器發(fā)送的公鑰進(jìn)行加密得到(AES_KEY_SECRET),之后返回給服務(wù)端,服務(wù)端通過(guò)私鑰將客戶(hù)端發(fā)送的AES_KEY_SECRET進(jìn)行解密得到AEK_KEY,最后客戶(hù)端和服務(wù)器通過(guò)AEK_KEY進(jìn)行報(bào)文的加密通訊,改造如下:

          可以看到這種情況下中間人是竊取不到用于AES加密的秘鑰,所以對(duì)于后續(xù)的通訊是肯定無(wú)法進(jìn)行解密了,那么這樣做就是絕對(duì)安全了嗎?

          所謂道高一尺魔高一丈,中間人為了對(duì)應(yīng)這種加密方法又想出了一個(gè)新的破解方案,既然拿不到AES_KEY,那我就把自己模擬成一個(gè)客戶(hù)端和服務(wù)器端的結(jié)合體,在用戶(hù)->中間人的過(guò)程中中間人模擬服務(wù)器的行為,這樣可以拿到用戶(hù)請(qǐng)求的明文,在中間人->服務(wù)器的過(guò)程中中間人模擬客戶(hù)端行為,這樣可以拿到服務(wù)器響應(yīng)的明文,以此來(lái)進(jìn)行中間人攻擊:

          這一次通信再次被中間人截獲,中間人自己也偽造了一對(duì)公私鑰,并將公鑰發(fā)送給用戶(hù)以此來(lái)竊取客戶(hù)端生成的AES_KEY,在拿到AES_KEY之后就能輕松的進(jìn)行解密了。

          中間人這樣為所欲為,就沒(méi)有辦法制裁下嗎,當(dāng)然有啊,接下來(lái)我們看看 HTTPS 是怎么解決通訊安全問(wèn)題的。


          2. HTTPS 協(xié)議

          2.1 HTTPS 簡(jiǎn)介

          HTTPS 其實(shí)是SSL+HTTP的簡(jiǎn)稱(chēng),當(dāng)然現(xiàn)在SSL基本已經(jīng)被TLS取代了,不過(guò)接下來(lái)我們還是統(tǒng)一以SSL作為簡(jiǎn)稱(chēng),SSL協(xié)議其實(shí)不止是應(yīng)用在HTTP協(xié)議上,還在應(yīng)用在各種應(yīng)用層協(xié)議上,例如:FTP、WebSocket。

          其實(shí)SSL協(xié)議大致就和上一節(jié)非對(duì)稱(chēng)加密的性質(zhì)一樣,握手的過(guò)程中主要也是為了交換秘鑰,然后再通訊過(guò)程中使用對(duì)稱(chēng)加密進(jìn)行通訊,大概流程如下:

          這里我只是畫(huà)了個(gè)示意圖,其實(shí)真正的 SSL 握手會(huì)比這個(gè)復(fù)雜的多,但是性質(zhì)還是差不多,而且我們這里需要關(guān)注的重點(diǎn)在于 HTTPS 是如何防止中間人攻擊的。

          通過(guò)上圖可以觀(guān)察到,服務(wù)器是通過(guò) SSL 證書(shū)來(lái)傳遞公鑰,客戶(hù)端會(huì)對(duì) SSL 證書(shū)進(jìn)行驗(yàn)證,其中證書(shū)認(rèn)證體系就是確保SSL安全的關(guān)鍵,接下來(lái)我們就來(lái)講解下CA 認(rèn)證體系,看看它是如何防止中間人攻擊的。

          2.2 CA 認(rèn)證體系

          上一節(jié)我們看到客戶(hù)端需要對(duì)服務(wù)器返回的 SSL 證書(shū)進(jìn)行校驗(yàn),那么客戶(hù)端是如何校驗(yàn)服務(wù)器 SSL 證書(shū)的安全性呢。

          1、權(quán)威認(rèn)證機(jī)構(gòu)

          在 CA 認(rèn)證體系中,所有的證書(shū)都是由權(quán)威機(jī)構(gòu)來(lái)頒發(fā),而權(quán)威機(jī)構(gòu)的 CA 證書(shū)都是已經(jīng)在操作系統(tǒng)中內(nèi)置的,我們把這些證書(shū)稱(chēng)之為CA根證書(shū):

          2、簽發(fā)證書(shū)

          我們的應(yīng)用服務(wù)器如果想要使用 SSL 的話(huà),需要通過(guò)權(quán)威認(rèn)證機(jī)構(gòu)來(lái)簽發(fā)CA證書(shū),我們將服務(wù)器生成的公鑰和站點(diǎn)相關(guān)信息發(fā)送給CA簽發(fā)機(jī)構(gòu),再由CA簽發(fā)機(jī)構(gòu)通過(guò)服務(wù)器發(fā)送的相關(guān)信息用CA簽發(fā)機(jī)構(gòu)進(jìn)行加簽,由此得到我們應(yīng)用服務(wù)器的證書(shū),證書(shū)會(huì)對(duì)應(yīng)的生成證書(shū)內(nèi)容的簽名,并將該簽名使用CA簽發(fā)機(jī)構(gòu)的私鑰進(jìn)行加密得到證書(shū)指紋,并且與上級(jí)證書(shū)生成關(guān)系鏈。

          這里我們把百度的證書(shū)下載下來(lái)看看:

          可以看到百度是受信于GlobalSign G2,同樣的GlobalSign G2是受信于GlobalSign R1,當(dāng)客戶(hù)端(瀏覽器)做證書(shū)校驗(yàn)時(shí),會(huì)一級(jí)一級(jí)的向上做檢查,直到最后的根證書(shū),如果沒(méi)有問(wèn)題說(shuō)明服務(wù)器證書(shū)是可以被信任的。

          3、如何驗(yàn)證服務(wù)器證書(shū)

          那么客戶(hù)端(瀏覽器)又是如何對(duì)服務(wù)器證書(shū)做校驗(yàn)的呢,首先會(huì)通過(guò)層級(jí)關(guān)系找到上級(jí)證書(shū),通過(guò)上級(jí)證書(shū)里的公鑰來(lái)對(duì)服務(wù)器的證書(shū)指紋進(jìn)行解密得到簽名(sign1),再通過(guò)簽名算法算出服務(wù)器證書(shū)的簽名(sign2),通過(guò)對(duì)比sign1和sign2,如果相等就說(shuō)明證書(shū)是沒(méi)有被篡改也不是偽造的。

          這里有趣的是,證書(shū)校驗(yàn)用的 RSA 是通過(guò)私鑰加密證書(shū)簽名,公鑰解密來(lái)巧妙的驗(yàn)證證書(shū)有效性。

          這樣通過(guò)證書(shū)的認(rèn)證體系,我們就可以避免了中間人竊取AES_KEY從而發(fā)起攔截和修改 HTTP 通訊的報(bào)文。


          總結(jié)

          首先先通過(guò)對(duì) HTTP 中間人攻擊的來(lái)了解到 HTTP 為什么是不安全的,然后再?gòu)陌踩シ赖募夹g(shù)演變一直到 HTTPS 的原理概括,希望能讓大家對(duì) HTTPS 有個(gè)更深刻的了解。


          推薦閱讀

          1、Spring Boot+Vue項(xiàng)目實(shí)戰(zhàn)

          2、B站:4小時(shí)上手MyBatis Plus

          3、一文搞懂前后端分離

          4、快速上手Spring Boot+Vue前后端分離


          楠哥簡(jiǎn)介

          資深 Java 工程師,微信號(hào)?southwindss

          《Java零基礎(chǔ)實(shí)戰(zhàn)》一書(shū)作者

          騰訊課程官方 Java 面試官今日頭條認(rèn)證大V

          GitChat認(rèn)證作者,B站認(rèn)證UP主(楠哥教你學(xué)Java)

          致力于幫助萬(wàn)千 Java 學(xué)習(xí)者持續(xù)成長(zhǎng)。




          有收獲,就點(diǎn)個(gè)在看?
          瀏覽 55
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人上人草视频在线观看 | 爆乳尤物一区二区三区 | 日P免费视频 | 99久久婷婷国产精品2020 | 大香蕉现现伊人 |