<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加密(握手)過(guò)程

          共 3365字,需瀏覽 7分鐘

           ·

          2021-02-27 16:31


          祝:全國(guó)硒家人元宵節(jié)快樂(lè)!

          闔家 歡樂(lè),團(tuán)團(tuán) 圓圓!

          點(diǎn)上方藍(lán)字關(guān)注公眾號(hào)「前端UpUp


          • 作者:Artifacts

            鏈接:https://www.jianshu.com/p/e30a8c4fa329


          HTTPS(全稱:Hypertext Transfer Protocol Secure,超文本傳輸安全協(xié)議),是以安全為目標(biāo)的HTTP通道,簡(jiǎn)單講是HTTP的安全版。

          HTTP+加密+認(rèn)證+完整性保護(hù) = HTTPS


          • HTTP:直接通過(guò)明文在瀏覽器和服務(wù)器之間傳遞信息。

          • HTTPS:采用 對(duì)稱加密 和 非對(duì)稱加密 結(jié)合的方式來(lái)保護(hù)瀏覽器和服務(wù)端之間的通信安全。
            對(duì)稱加密算法加密數(shù)據(jù)+非對(duì)稱加密算法交換密鑰+數(shù)字證書(shū)驗(yàn)證身份=安全

          HTTPS其實(shí)是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務(wù)端和客戶端的信息傳輸都會(huì)通過(guò)TLS進(jìn)行加密,所以傳輸?shù)臄?shù)據(jù)都是加密后的數(shù)據(jù)。

          1. 傳統(tǒng)的HTTP協(xié)議通信:傳統(tǒng)的HTTP報(bào)文是直接將報(bào)文信息傳輸?shù)絋CP然后TCP再通過(guò)TCP套接字發(fā)送給目的主機(jī)上。

          2. HTTPS協(xié)議通信:HTTPS是HTTP報(bào)文直接將報(bào)文信息傳輸給SSL套接字進(jìn)行加密,SSL加密后將加密后的報(bào)文發(fā)送給TCP套接字,然后TCP套接字再將加密后的報(bào)文發(fā)送給目的主機(jī),目的主機(jī)將通過(guò)TCP套接字獲取加密后的報(bào)文給SSL套接字,SSL解密后交給對(duì)應(yīng)進(jìn)程。

          具體是如何進(jìn)行加密,解密,驗(yàn)證的,且看下圖。

          HTTPS加密過(guò)程

          HTTPS加密請(qǐng)求(一次握手)過(guò)程

          • 首先,客戶端發(fā)起握手請(qǐng)求,以明文傳輸請(qǐng)求信息,包含版本信息,加密-套件候選列表,壓縮算法候選列表,隨機(jī)數(shù),擴(kuò)展字段等信息(這個(gè)沒(méi)什么好說(shuō)的,就是用戶在瀏覽器里輸入一個(gè)HTTPS網(wǎng)址,然后連接到服務(wù)端的443端口。)

          • 服務(wù)端的配置,采用HTTPS協(xié)議的服務(wù)器必須要有一套數(shù)字證書(shū),可以自己制作,也可以向組織申請(qǐng)。區(qū)別就是自己頒發(fā)的證書(shū)需要客戶端驗(yàn)證通過(guò),才可以繼續(xù)訪問(wèn),而使用受信任的公司申請(qǐng)的證書(shū)則不會(huì)彈出提示頁(yè)面。這套證書(shū)其實(shí)就是一對(duì)公鑰和私鑰。如果對(duì)公鑰不太理解,可以想象成一把鑰匙和一個(gè)鎖頭,只是世界上只有你一個(gè)人有這把鑰匙,你可以把鎖頭給別人,別人可以用這個(gè)鎖把重要的東西鎖起來(lái),然后發(fā)給你,因?yàn)橹挥心阋粋€(gè)人有這把鑰匙,所以只有你才能看到被這把鎖鎖起來(lái)的東西。

          • 服務(wù)端返回協(xié)商的信息結(jié)果,包括選擇使用的協(xié)議版本 version,選擇的加密套件 cipher suite,選擇的壓縮算法 compression method、隨機(jī)數(shù) random_S 以及證書(shū)。(這個(gè)證書(shū)其實(shí)就是公鑰,只是包含了很多信息,如證書(shū)的頒發(fā)機(jī)構(gòu),過(guò)期時(shí)間等等。)

          • 客戶端驗(yàn)證證書(shū)的合法性,包括可信性,是否吊銷,過(guò)期時(shí)間和域名。(這部分工作是由客戶端的SSL/TLS來(lái)完成的,首先會(huì)驗(yàn)證公鑰是否有效,比如頒發(fā)機(jī)構(gòu),過(guò)期時(shí)間等等,如果發(fā)現(xiàn)異常,則會(huì)彈出一個(gè)警示框,提示證書(shū)存在的問(wèn)題。如果證書(shū)沒(méi)有問(wèn)題,那么就生成一個(gè)隨機(jī)值。然后用證書(shū)(也就是公鑰)對(duì)這個(gè)隨機(jī)值進(jìn)行加密。就好像上面說(shuō)的,把隨機(jī)值用鎖頭鎖起來(lái),這樣除非有鑰匙,不然看不到被鎖住的內(nèi)容。)

          • 客戶端使用公匙對(duì)對(duì)稱密匙加密,發(fā)送給服務(wù)端。(這部分傳送的是用證書(shū)加密后的隨機(jī)值,目的是讓服務(wù)端得到這個(gè)隨機(jī)值,以后客戶端和服務(wù)端的通信就可以通過(guò)這個(gè)隨機(jī)值來(lái)進(jìn)行加密解密了。)

          • 服務(wù)器用私鑰解密,拿到對(duì)稱加密的密匙。(服務(wù)端用私鑰解密后,得到了客戶端傳過(guò)來(lái)的隨機(jī)值,然后把內(nèi)容通過(guò)該隨機(jī)值進(jìn)行對(duì)稱加密,將信息和私鑰通過(guò)某種算法混合在一起,這樣除非知道私鑰,不然無(wú)法獲取內(nèi)容,而正好客戶端和服務(wù)端都知道這個(gè)私鑰,所以只要加密算法夠彪悍,私鑰夠復(fù)雜,數(shù)據(jù)就夠安全。)

          • 傳輸加密后的信息,這部分信息就是服務(wù)端用私鑰加密后的信息,可以在客戶端用隨機(jī)值解密還原。

          • 客戶端解密信息,客戶端用之前生產(chǎn)的私鑰解密服務(wù)端傳過(guò)來(lái)的信息,于是獲取了解密后的內(nèi)容。整個(gè)過(guò)程第三方即使監(jiān)聽(tīng)到了數(shù)據(jù),也束手無(wú)策。

          加密

          客戶端和服務(wù)端之間的加密機(jī)制:


          TLS握手


          TLS協(xié)議是基于TCP協(xié)議之上的,圖中第一個(gè)藍(lán)色往返是TCP的握手過(guò)程,之后兩次橙色的往返,我們可以叫做TLS的握手。握手過(guò)程如下:

          • client1:TLS版本號(hào)+所支持加密套件列表+希望使用的TLS選項(xiàng)

          • Server1:選擇一個(gè)客戶端的加密套件+自己的公鑰+自己的證書(shū)+希望使用的TLS選項(xiàng)+(要求客戶端證書(shū));

          • Client2:(自己的證書(shū))+使用服務(wù)器公鑰和協(xié)商的加密套件加密一個(gè)對(duì)稱秘鑰(自己生成的一個(gè)隨機(jī)值);

          • Server2:使用私鑰解密出對(duì)稱秘鑰(隨機(jī)值)后,發(fā)送加密的Finish消息,表明完成握手

          這里可能要提一下什么是對(duì)稱加密和非對(duì)稱加密:
          一般的對(duì)稱加密像這樣:

          encrypt(明文,秘鑰) = 密文
          decrypt(密文,秘鑰) = 明文

          共享密鑰加密也稱對(duì)稱密鑰加密。采用的是使用相同密鑰對(duì)報(bào)文進(jìn)行加密解密
          我們可以將共享密鑰加密這樣理解:我們把我們要給別人的東西放到一個(gè)箱子里面,然后給箱子上了一把鎖。當(dāng)箱子到了我們想給的那個(gè)人
          身上時(shí),他也需要這把鑰匙才能開(kāi)鎖。
          這樣就產(chǎn)生了一個(gè)問(wèn)題了,我們?cè)趺磳⑦@把鑰匙安全的交給對(duì)方呢,如果鑰匙在半路被人截取了,那么對(duì)箱子有沒(méi)有加鎖有什么區(qū)別呢。因此
          共享密鑰加密需要解決的一個(gè)大問(wèn)題就是如何安全的將密鑰交給解密方。

          也就是說(shuō)加密和解密用的是同一個(gè)秘鑰。而非對(duì)稱加密是這樣的:

          encrypt(明文,公鑰) = 密文
          decrypt(密文,私鑰) = 明文

          假設(shè)客戶發(fā)送報(bào)文,服務(wù)器接收?qǐng)?bào)文。客戶在發(fā)送報(bào)文的時(shí)候需要對(duì)報(bào)文加密,服務(wù)器有兩把密鑰,一把私鑰,一把公鑰。客戶在發(fā)送報(bào)文前需要先向服務(wù)器獲取公鑰進(jìn)行報(bào)文的加密。這把公鑰只能加密,不能解密,因此被任何人截獲到都沒(méi)什么用處。服務(wù)器收到加密后的報(bào)文,使用私鑰解密。整個(gè)過(guò)程中只涉及到公鑰的獲取,加密,密文傳輸,解密。并不涉及到解密用的私鑰傳輸。因此這種方式是安全的。但是涉及到太多細(xì)節(jié),整個(gè)流程
          下來(lái)耗時(shí)耗費(fèi)資源。
          再拿上面那個(gè)例子,這時(shí)候我們還想把一些東西鎖到箱子里給某人,我們稱他為大傻。我們先跟大傻聯(lián)系,大傻身上有兩把鑰匙,我們稱為鑰匙A和鑰匙B。鑰匙A可以用來(lái)造鎖,但是造好的鎖自己卻不能開(kāi),只能通過(guò)鑰匙B來(lái)開(kāi)。跟大傻取得聯(lián)系后大傻把鑰匙A給我們。我們拿著鑰匙A找造鎖師傅造了一把鎖,并且給箱子上鎖。然后將帶鎖的箱子通過(guò)物流發(fā)給大傻,就算鑰匙A被強(qiáng)盜截取了,強(qiáng)盜也開(kāi)不了箱子。大傻收到箱子后使用那把鑰匙B進(jìn)行開(kāi)鎖,拿到東西。由于鑰匙B一直再大傻身上,所以不用擔(dān)心被人拿走。

          加密和解密是需要不同的秘鑰的。
          經(jīng)過(guò)這幾次握手成功后,客服端和服務(wù)端之間通信的加密算法和所需要的密鑰也就確定下來(lái)了,之后雙方的交互都可以使用對(duì)稱加密算法加密了。

          HTTPS為了追求性能,又要保證安全,采用了共享密鑰加密和公開(kāi)密鑰加密混合的方式進(jìn)行報(bào)文傳輸。
          還是拿上面的鎖和箱子的例子來(lái)說(shuō)明。現(xiàn)在我們嫌棄每次加鎖都要造個(gè)新的鎖效率太慢了。我們現(xiàn)在有兩個(gè)箱子,一個(gè)箱子用于方我們要給大傻的東西,并且

          這個(gè)箱子加上了鎖。另一個(gè)箱子用于存放那把鎖的鑰匙。我們這時(shí)候找大傻拿到鑰匙A造了一把鎖后將那個(gè)存放鑰匙的箱子鎖起來(lái),然后將這個(gè)箱子給大傻,

          大傻拿到箱子使用鑰匙B開(kāi)鎖拿到鑰匙。這時(shí)候我們將那個(gè)存放了東西的箱子給大傻,大傻就可以通過(guò)這把鑰匙開(kāi)鎖拿到東西了。這樣以后我們就可以一直通過(guò)

          這把鎖和箱子互相給東西了,而不用發(fā)一次數(shù)據(jù)造一次鎖了。

          就是說(shuō)采用共有密鑰加密方式傳輸共享密鑰,當(dāng)共享密鑰安全到達(dá)服務(wù)端后往后的數(shù)據(jù)就都采用該密鑰進(jìn)行加密解密。


          抽獎(jiǎng)環(huán)節(jié)


          昨天送出了兩本掘金小冊(cè)子一折優(yōu)惠碼,朋友圈點(diǎn)贊第6,第99名。


          今天再送出兩本掘金一折小冊(cè)子,老規(guī)矩,加我好友,朋友圈點(diǎn)贊即可參加。


             感謝大家

          1. 關(guān)注「前端UpUp」,分享精選面試熱點(diǎn)文章。

          2. 加我好友,一起討論算法,2021一起UpUp。

          瀏覽 22
          點(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>
                  国产美女被干网站 | 青青草在线无码 | 逼特逼在线观看视频 | 精品人妻伦一二三区久久春菊成人漫画 | 男人天堂久久 |