国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

徹底搞懂HTTPS的加密原理

安全 應用安全
換種思路?試想一下,如果瀏覽器內部就預存了網站A的密鑰,且可以確保除了瀏覽器和網站A,不會有任何外人知道該密鑰,那理論上用對稱加密是可以的,這樣瀏覽器只要預存好世界上所有HTTPS網站的密鑰就行了!這么做顯然不現實。 怎么辦?所以我們就需要非對稱加密 。

HTTP 與 HTTPS 有哪些區別?

  1. HTTP 是超文本傳輸協議,信息是明文傳輸,存在安全風險的問題。HTTPS 則解決 HTTP 不安全的缺陷,在 TCP 和 HTTP 網絡層之間加入了 SSL/TLS 安全協議,使得報文能夠加密傳輸。
  2. HTTP 連接建立相對簡單, TCP 三次握手之后便可進行 HTTP 的報文傳輸。而 HTTPS 在 TCP 三次握手之后,還需進行 SSL/TLS 的握手過程,才可進入加密報文傳輸。
  3. HTTP 的端口號是 80,HTTPS 的端口號是 443。
  4. HTTPS 協議需要向 CA(證書權威機構)申請數字證書,來保證服務器的身份是可信的。

本文以問題的形式逐步展開,一步步解開HTTPS的面紗,希望能幫助你徹底搞懂HTTPS!

為什么需要加密?

因為http的內容是明文傳輸的,明文數據會經過中間代理服務器、路由器、wifi熱點、通信服務運營商等多個物理節點,如果信息在傳輸過程中被劫持,傳輸的內容就完全暴露了。劫持者還可以篡改傳輸的信息且不被雙方察覺,這就是中間人攻擊。所以我們才需要對信息進行加密。最容易理解的就是對稱加密 。

什么是對稱加密?

簡單說就是有一個密鑰,它可以加密一段信息,也可以對加密后的信息進行解密,和我們日常生活中用的鑰匙作用差不多。

用對稱加密可行嗎?

如果通信雙方都各自持有同一個密鑰,且沒有別人知道,這兩方的通信安全當然是可以被保證的(除非密鑰被破解)。

然而最大的問題就是這個密鑰怎么讓傳輸的雙方知曉,同時不被別人知道。如果由服務器生成一個密鑰并傳輸給瀏覽器,那在這個傳輸過程中密鑰被別人劫持到手了怎么辦?之后他就能用密鑰解開雙方傳輸的任何內容了,所以這么做當然不行。

換種思路?試想一下,如果瀏覽器內部就預存了網站A的密鑰,且可以確保除了瀏覽器和網站A,不會有任何外人知道該密鑰,那理論上用對稱加密是可以的,這樣瀏覽器只要預存好世界上所有HTTPS網站的密鑰就行了!這么做顯然不現實。
怎么辦?所以我們就需要非對稱加密 。

什么是非對稱加密?

簡單說就是有兩把密鑰,通常一把叫做公鑰、一把叫私鑰,用公鑰加密的內容必須用私鑰才能解開,同樣,私鑰加密的內容只有公鑰能解開。

用非對稱加密可行嗎?

鑒于非對稱加密的機制,我們可能會有這種思路:服務器先把公鑰以明文方式傳輸給瀏覽器,之后瀏覽器向服務器傳數據前都先用這個公鑰加密好再傳,這條數據的安全似乎可以保障了!因為只有服務器有相應的私鑰能解開公鑰加密的數據。

然而反過來由服務器到瀏覽器的這條路怎么保障安全?如果服務器用它的私鑰加密數據傳給瀏覽器,那么瀏覽器用公鑰可以解密它,而這個公鑰是一開始通過明文傳輸給瀏覽器的,若這個公鑰被中間人劫持到了,那他也能用該公鑰解密服務器傳來的信息了。所以目前似乎只能保證由瀏覽器向服務器傳輸數據的安全性(其實仍有漏洞,下文會說),那利用這點你能想到什么解決方案嗎?

改良的非對稱加密方案,似乎可以?

我們已經理解通過一組公鑰私鑰,可以保證單個方向傳輸的安全性,那用兩組公鑰私鑰,是否就能保證雙向傳輸都安全了?請看下面的過程:

  1. 某網站服務器擁有公鑰A與對應的私鑰A’;瀏覽器擁有公鑰B與對應的私鑰B’。
  2. 瀏覽器把公鑰B明文傳輸給服務器。
  3. 服務器把公鑰A明文給傳輸瀏覽器。
  4. 之后瀏覽器向服務器傳輸的內容都用公鑰A加密,服務器收到后用私鑰A’解密。由于只有服務器擁有私鑰A’,所以能保證這條數據的安全。
  5. 同理,服務器向瀏覽器傳輸的內容都用公鑰B加密,瀏覽器收到后用私鑰B’解密。同上也可以保證這條數據的安全。

的確可以!拋開這里面仍有的漏洞不談(下文會講),HTTPS的加密卻沒使用這種方案,為什么?很重要的原因是非對稱加密算法非常耗時,而對稱加密快很多。那我們能不能運用非對稱加密的特性解決前面提到的對稱加密的漏洞?

非對稱加密+對稱加密?

既然非對稱加密耗時,那非對稱加密+對稱加密結合可以嗎?而且得盡量減少非對稱加密的次數。當然是可以的,且非對稱加密、解密各只需用一次即可。
請看一下這個過程:

  1. 某網站擁有用于非對稱加密的公鑰A、私鑰A’。
  2. 瀏覽器向網站服務器請求,服務器把公鑰A明文給傳輸瀏覽器。
  3. 瀏覽器隨機生成一個用于對稱加密的密鑰X,用公鑰A加密后傳給服務器。
  4. 服務器拿到后用私鑰A’解密得到密鑰X。
  5. 這樣雙方就都擁有密鑰X了,且別人無法知道它。之后雙方所有數據都通過密鑰X加密解密即可。

完美!HTTPS基本就是采用了這種方案。完美?還是有漏洞的。

中間人攻擊

中間人攻擊(https://blog.pradeo.com/man-in-the-middle-attack)

如果在數據傳輸過程中,中間人劫持到了數據,此時他的確無法得到瀏覽器生成的密鑰X,這個密鑰本身被公鑰A加密了,只有服務器才有私鑰A’解開它,然而中間人卻完全不需要拿到私鑰A’就能干壞事了。請看:

  1. 某網站有用于非對稱加密的公鑰A、私鑰A’。
  2. 瀏覽器向網站服務器請求,服務器把公鑰A明文給傳輸瀏覽器。
  3. 中間人劫持到公鑰A,保存下來,把數據包中的公鑰A替換成自己偽造的公鑰B(它當然也擁有公鑰B對應的私鑰B’)。
  4. 瀏覽器生成一個用于對稱加密的密鑰X,用公鑰B(瀏覽器無法得知公鑰被替換了)加密后傳給服務器。
  5. 中間人劫持后用私鑰B’解密得到密鑰X,再用公鑰A加密后傳給服務器。
  6. 服務器拿到后用私鑰A’解密得到密鑰X。

這樣在雙方都不會發現異常的情況下,中間人通過一套“貍貓換太子”的操作,掉包了服務器傳來的公鑰,進而得到了密鑰X。根本原因是瀏覽器無法確認收到的公鑰是不是網站自己的,因為公鑰本身是明文傳輸的,難道還得對公鑰的傳輸進行加密?這似乎變成雞生蛋、蛋生雞的問題了。解法是什么?

如何證明瀏覽器收到的公鑰一定是該網站的公鑰?

其實所有證明的源頭都是一條或多條不證自明的“公理”(可以回想一下數學上公理),由它推導出一切。比如現實生活中,若想證明某身份證號一定是小明的,可以看他身份證,而身份證是由政府作證的,這里的“公理”就是“政府機構可信”,這也是社會正常運作的前提。

那能不能類似地有個機構充當互聯網世界的“公理”呢?讓它作為一切證明的源頭,給網站頒發一個“身份證”?

它就是CA機構,它是如今互聯網世界正常運作的前提,而CA機構頒發的“身份證”就是數字證書。

數字證書

網站在使用HTTPS前,需要向CA機構申領一份數字證書,數字證書里含有證書持有者信息、公鑰信息等。服務器把證書傳輸給瀏覽器,瀏覽器從證書里獲取公鑰就行了,證書就如身份證,證明“該公鑰對應該網站”。而這里又有一個顯而易見的問題,“證書本身的傳輸過程中,如何防止被篡改”?即如何證明證書本身的真實性?身份證運用了一些防偽技術,而數字證書怎么防偽呢?解決這個問題我們就接近勝利了!

如何防止數字證書被篡改?

我們把證書原本的內容生成一份“簽名”,比對證書內容和簽名是否一致就能判別是否被篡改。這就是數字證書的“防偽技術”,這里的“簽名”就叫數字簽名:

數字簽名

這部分內容建議看下圖并結合后面的文字理解,圖中左側是數字簽名的制作過程,右側是驗證過程:

數字簽名的制作過程:

  1. CA機構擁有非對稱加密的私鑰和公鑰。
  2. CA機構對證書明文數據T進行hash。
  3. 對hash后的值用私鑰加密,得到數字簽名S。

明文和數字簽名共同組成了數字證書,這樣一份數字證書就可以頒發給網站了。那瀏覽器拿到服務器傳來的數字證書后,如何驗證它是不是真的?(有沒有被篡改、掉包)

瀏覽器驗證過程:

  1. 拿到證書,得到明文T,簽名S。
  2. 用CA機構的公鑰對S解密(由于是瀏覽器信任的機構,所以瀏覽器保有它的公鑰。詳情見下文),得到S’。
  3. 用證書里指明的hash算法對明文T進行hash得到T’。
  4. 顯然通過以上步驟,T’應當等于S‘,除非明文或簽名被篡改。所以此時比較S’是否等于T’,等于則表明證書可信。

為何么這樣可以保證證書可信呢?我們來仔細想一下。

中間人有可能篡改該證書嗎?

假設中間人篡改了證書的原文,由于他沒有CA機構的私鑰,所以無法得到此時加密后簽名,無法相應地篡改簽名。瀏覽器收到該證書后會發現原文和簽名解密后的值不一致,則說明證書已被篡改,證書不可信,從而終止向服務器傳輸信息,防止信息泄露給中間人。

既然不可能篡改,那整個證書被掉包呢?

中間人有可能把證書掉包嗎?

假設有另一個網站B也拿到了CA機構認證的證書,它想劫持網站A的信息。于是它成為中間人攔截到了A傳給瀏覽器的證書,然后替換成自己的證書,傳給瀏覽器,之后瀏覽器就會錯誤地拿到B的證書里的公鑰了,這確實會導致上文“中間人攻擊”那里提到的漏洞?

其實這并不會發生,因為證書里包含了網站A的信息,包括域名,瀏覽器把證書里的域名與自己請求的域名比對一下就知道有沒有被掉包了。

為什么制作數字簽名時需要hash一次?

我初識HTTPS的時候就有這個疑問,因為似乎那里的hash有點多余,把hash過程去掉也能保證證書沒有被篡改。

最顯然的是性能問題,前面我們已經說了非對稱加密效率較差,證書信息一般較長,比較耗時。而hash后得到的是固定長度的信息(比如用md5算法hash后可以得到固定的128位的值),這樣加解密就快很多。

當然也有安全上的原因,這部分內容相對深一些,感興趣的可以看這篇解答:
crypto.stackexchange.com/a/12780

怎么證明CA機構的公鑰是可信的?

你們可能會發現上文中說到CA機構的公鑰,我幾乎一筆帶過,“瀏覽器保有它的公鑰”,這是個什么保有法?怎么證明這個公鑰是否可信?

讓我們回想一下數字證書到底是干啥的?沒錯,為了證明某公鑰是可信的,即“該公鑰是否對應該網站”,那CA機構的公鑰是否也可以用數字證書來證明?沒錯,操作系統、瀏覽器本身會預裝一些它們信任的根證書,如果其中會有CA機構的根證書,這樣就可以拿到它對應的可信公鑰了。

實際上證書之間的認證也可以不止一層,可以A信任B,B信任C,以此類推,我們把它叫做信任鏈或數字證書鏈。也就是一連串的數字證書,由根證書為起點,透過層層信任,使終端實體證書的持有者可以獲得轉授的信任,以證明身份。

另外,不知你們是否遇到過網站訪問不了、提示需安裝證書的情況?這里安裝的就是根證書。說明瀏覽器不認給這個網站頒發證書的機構,那么你就得手動下載安裝該機構的根證書(風險自己承擔XD)。安裝后,你就有了它的公鑰,就可以用它驗證服務器發來的證書是否可信了。

每次進行HTTPS請求時都必須在SSL/TLS層進行握手傳輸密鑰嗎?

這也是我當時的困惑之一,顯然每次請求都經歷一次密鑰傳輸過程非常耗時,那怎么達到只傳輸一次呢?

服務器會為每個瀏覽器(或客戶端軟件)維護一個session ID,在TLS握手階段傳給瀏覽器,瀏覽器生成好密鑰傳給服務器后,服務器會把該密鑰存到相應的session ID下,之后瀏覽器每次請求都會攜帶session ID,服務器會根據session ID找到相應的密鑰并進行解密加密操作,這樣就不必要每次重新制作、傳輸密鑰了!

總結

整個非對稱加密過程都是為了最后的對稱加密服務的,最終目的是證明證書中的公鑰是安全且未篡改。使用公鑰來加密一個秘鑰,并把秘鑰傳給后端,后端使用私鑰解密秘鑰,這樣兩端都擁有同一個秘鑰,從而進行對稱加密。所以私鑰是絕對不能泄漏的,不然完蛋。

可以看下這張圖,梳理一下整個流程(SSL、TLS握手有一些區別,不同版本間也有區別,不過大致過程就是這樣):

SSL/TLS 協議基本流程:

  • 客戶端向服務器索要并驗證服務器的公鑰。
  • 雙方協商生產「會話秘鑰」。
  • 雙方采用「會話秘鑰」進行加密通信。


責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-10-18 10:55:55

HashMap

2022-08-26 13:24:03

version源碼sources

2021-10-11 11:58:41

Channel原理recvq

2021-10-09 19:05:06

channelGo原理

2021-07-16 11:35:20

Java線程池代碼

2022-04-24 11:06:54

SpringBootjar代碼

2020-12-04 06:37:19

HTTPS原理安全

2021-07-08 10:08:03

DvaJS前端Dva

2025-11-13 08:08:15

2025-04-21 04:00:00

2023-09-28 08:15:05

SpringBean加載

2021-12-29 17:29:07

KubernetesEvents集群

2020-04-28 22:12:30

Nginx正向代理反向代理

2021-10-15 08:32:03

RocketMQ數據結構架構

2024-10-15 17:12:38

代碼父子線程開源

2024-01-03 13:39:00

JS,Javascrip算法

2025-01-13 16:00:00

服務網關分布式系統架構

2025-04-11 05:55:00

2021-08-18 23:10:56

setState代碼性能

2021-02-01 11:30:13

React前端調度
點贊
收藏

51CTO技術棧公眾號

91成人理论电影| 国产欧美亚洲日本| 欧美黄色小说| 国产一区二区三区在线观看免费视频| 欧美特黄级在线| 欧美一级日本a级v片| 毛片一区二区三区四区| 午夜在线观看视频网站| 色欲av无码一区二区人妻| 99久久.com| 日日噜噜噜夜夜爽亚洲精品| 美州a亚洲一视本频v色道| 国产性色一区二区| 毛片在线视频观看| 久久精品一本| 亚洲综合中文字幕在线| 久久精品国产亚洲5555| 亚洲色图欧美制服丝袜另类第一页| 黄网在线观看| 精品国产乱码久久久久久婷婷| 激情网站五月天| 国内外成人在线视频| 牛人盗摄一区二区三区视频| 久久国产综合| 97成人超碰免| 成人av资源网址| 久久不射电影网| 9999精品| 美女999久久久精品视频| 色8久久影院午夜场| 精品动漫一区二区三区在线观看| 国产日本在线视频| 欧美性猛交xxxx黑人| av在线www| 五月天欧美精品| 香蕉自在线视频| 亚洲成人免费电影| 在线播放91| 在线日韩一区二区| 久草视频视频在线播放| 狠狠躁夜夜躁人人爽天天天天97| 中文字幕在线资源| 91成人免费在线| 3p视频在线观看| 欧美在线免费视屏| 国产在线观看a| 精品国产一区二区三区久久久蜜月| 免费在线观看黄| 亚洲精品在线观看视频| 午夜av在线播放| 精品亚洲国产视频| 青青在线精品| 久久久久久久久国产精品| 老牛精品亚洲成av人片| 国产精品wwwwww| 欧美二区视频| 日韩精品最新在线观看| 国产综合成人久久大片91| 日韩网站在线免费观看| 久久亚洲精品国产精品紫薇| 99免费视频| 午夜精品一区二区三区电影天堂 | 伊人一区二区三区| 日韩av电影免费| 色屁屁一区二区| 蜜桃传媒在线观看免费进入| 精品视频在线播放色网色视频| 成人久久精品| 日韩女在线观看| 99在线观看免费视频精品观看| 色就是色欧美| 久久欧美中文字幕| 中文在线中文字幕| 欧美一级二级在线观看| 97人人做人人爽香蕉精品| 97av在线影院| 老司机免费视频久久| 欧美成人xxxxx| 欧美日韩国产限制| av免费不卡| 45www国产精品网站| 亚洲激情综合| 亚洲中文字幕无码中文字| 亚洲成人www| 国产色播av在线| 久久久久一本一区二区青青蜜月 | 亚洲 欧美 日韩 国产综合 在线 | 欧美xxxx综合视频| 97精品国产福利一区二区三区| 精品伊人久久大线蕉色首页| 国产成人av一区| 激情视频免费观看在线| 欧美电影免费提供在线观看| 欧美成人app| 成人国产精品一区| 国产一区二区三区蝌蚪| 秋霞福利视频| 日韩精品免费视频| 成人激情开心网| 久久国产精品免费观看| 亚洲成人精品一区二区| 日本肉肉一区| av在线不卡一区| 国产欧美日韩另类一区| 毛片在线看片| 欧美激情一区二区三区久久久 | 国产人成一区二区三区影院| 免费毛片在线| 欧美裸身视频免费观看| 国产精品一二| 五月天电影免费在线观看一区| 91精品一区二区三区在线观看| 国产厕拍一区| 免费国产成人看片在线| 色综合激情久久| 老牛精品亚洲成av人片| 看全色黄大色大片| 在线免费亚洲电影| 羞羞色国产精品网站| 99er在线视频| 69av一区二区三区| 天天综合国产| 手机在线成人免费视频| 亚洲精品视频在线播放| 伊人蜜桃色噜噜激情综合| 二区视频在线| 精品国产一区二区三区久久| 丝袜a∨在线一区二区三区不卡| 中国在线观看免费国语版电影| 欧美理论电影在线观看| 国产在线播放一区| 暖暖日本在线观看| 国产日韩综合一区二区性色av| www国产亚洲精品久久麻豆| а√天堂8资源中文在线| 国产精品青青草| 亚洲国产成人porn| 欧美一区自拍| 又色又爽又高潮免费视频国产| 亚洲欧美精品伊人久久| 性色一区二区| 激情在线小视频| 国产欧美日韩一区二区三区| 色悠悠久久综合| 亚洲欧美综合久久久| 中文在线观看视频| 91色琪琪电影亚洲精品久久| 一区二区三区不卡视频| 免费成人结看片| 老司机性视频| 91成人在线播放| 国产精品第四页| 卡一精品卡二卡三网站乱码 | 国产精品日韩久久久| 日本福利在线观看| 国产精品国产三级国产aⅴ浪潮| 中文字幕亚洲不卡| 日韩av三区| 91精品国产一区二区三密臀| 国产成人一区二| 狠狠躁夜夜躁久久躁别揉| 中文视频一区| 欧美被日视频| 亚洲成人午夜在线| 亚洲欧美另类中文字幕| 懂色一区二区三区免费观看| 日本精品网站| 最新中文字幕免费视频| 亚州成人av在线| 亚洲国产精品一区二区久久恐怖片| 国产伦精品一区二区三区视频 | 日批视频在线免费看| 在线观看中文字幕亚洲| 99天天综合性| 黄色成人美女网站| 日本午夜免费福利视频| 91精品免费久久久久久久久| 亚洲成av人影院在线观看网| 欧美精品一线| free性护士videos欧美| 国产网站免费在线观看| 777国产偷窥盗摄精品视频| 亚洲午夜精品网| 1024成人| 一二三四视频在线中文| 国产成人精品无码播放| 国产精品第一页在线| 欧美日韩久久久| 国产精品一区二区三区99| 国产成人av毛片| 久久久资源网| 精品91一区二区三区| 韩剧1988免费观看全集| 在线一区二区视频| 国产高清在线精品| 九一精品国产| 成年人国产在线观看| 一区二区三区 欧美| 成人h视频在线观看| 亚洲精品在线视频|