自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

聊一聊 TLS/SSL

安全 應(yīng)用安全
聰明的小伙伴肯定會想到:只要能證明對方有私鑰就行了!也就是說瀏覽器用證書(即公鑰)加密一個數(shù)據(jù),然后發(fā)送給對方;如果對方有私鑰,那就能解密這個數(shù)據(jù)并返回給瀏覽器,那瀏覽器就知道對方身份了。

哈嘍大家好,我是咸魚

當(dāng)我們在上網(wǎng)沖浪的時候,會在瀏覽器界面頂部看到一個小鎖標(biāo)志,或者網(wǎng)址以 "https://" 開頭

圖片圖片

這意味著我們正在使用 TLS/SSL 協(xié)議進(jìn)行安全通信。雖然它可能看起來只是一個小小的鎖圖標(biāo)和一個 “https” ,但實(shí)際上,這個協(xié)議在保護(hù)我們的在線隱私和安全方面扮演著至關(guān)重要的角色

那今天咸魚就跟大家聊一聊 TLS/SSL 相關(guān)的一些知識

閱讀文章之前,需要知道:

TLS(Transport Layer Security)和 SSL(Secure Sockets Layer)都是用于加密通信的協(xié)議

TLS 是 SSL 的升級版本,它修復(fù)了 SSL 中存在的一些安全漏洞,并提供了更高級的安全性

中間人攻擊

一天中午,咸魚在星巴克里打算上網(wǎng)沖浪一下,這時候有一個很壞很壞的人走進(jìn)了星巴克

壞人建了一個跟星巴克 WI-FI 同名的接入點(diǎn),當(dāng)咸魚上網(wǎng)的時候,稍微不注意連接到了壞人偽造的那個假的星巴克 WI-FI,這就導(dǎo)致咸魚任何流量請求都在壞人的監(jiān)控之下

又或者壞人跟咸魚都連上了星巴克 WI-FI ,然后他通過偽造 DHCP 服務(wù)來告訴咸魚的設(shè)備:【我就是網(wǎng)關(guān),要上網(wǎng)的話,讓我?guī)湍戕D(zhuǎn)發(fā)就可以了】

當(dāng)咸魚要登陸銀行進(jìn)行轉(zhuǎn)賬開始訪問銀行網(wǎng)站的時候,壞人截獲了咸魚這個請求,并向銀行的網(wǎng)站發(fā)送一個偽裝請求,假裝是咸魚在請求

銀行以為這個請求來自于咸魚,于是返回響應(yīng);壞人把這個響應(yīng)截獲了,然后轉(zhuǎn)發(fā)到咸魚的設(shè)備上

咸魚的設(shè)備認(rèn)為這個響應(yīng)來自于銀行,于是咸魚看到的是一個正常的銀行網(wǎng)站登陸界面,便乖乖地輸入了登錄信息(用戶名密碼等)

壞人再次截獲這些信息,然后將其發(fā)送給真正的銀行網(wǎng)站,這時候壞人已經(jīng)拿到了咸魚的登錄信息

同時,他也繼續(xù)截獲所有咸魚與銀行之間的通信,以便訪問咸魚的銀行賬戶或者進(jìn)行其他惡意活動

圖片圖片

這便是中間人攻擊(Man-in-the-Middle Attack,簡稱 MITM 攻擊)

中間人攻擊是一種計算機(jī)安全威脅,攻擊者插入自己在通信的兩端,竊取或篡改信息

這種攻擊可以在不被察覺的情況下進(jìn)行,因?yàn)橥ㄐ诺膬煞秸J(rèn)為他們正在直接相互通信,而實(shí)際上信息經(jīng)過了攻擊者的處理

如何避免遭受中間人攻擊呢?聰明的小伙伴很快就想到了——通過 HTTPS 來進(jìn)行加密通信!這樣即使信息被截獲,壞人也無法輕易解密

TLS/SSL

非對稱加密

HTTPS 通過 TLS/SSL 來實(shí)現(xiàn)加密傳輸數(shù)據(jù),保證數(shù)據(jù)在傳輸?shù)倪^程中中間人無法解密,這樣就保證了數(shù)據(jù)的安全性

加密數(shù)據(jù)不是什么難題,通信的時候雙方用密鑰對數(shù)據(jù)加密就行了

但如果大家跟銀行進(jìn)行加密通信的時候用的密鑰都是一樣的,中間人依舊能夠使用這個密鑰去偽造網(wǎng)站然后截獲你的加密數(shù)據(jù)。這樣的話要不要密鑰都沒啥區(qū)別,甚至不還如不要密鑰呢

所以最好的情況就是:我跟銀行通信的時候協(xié)商好用什么密鑰——用 A 密鑰對數(shù)據(jù)加密(公鑰),然后用 B 密鑰對數(shù)據(jù)解密(私鑰),而且:

  1. A 密鑰加密的數(shù)據(jù)只能 B 密鑰解密
  2. 這個 B 密鑰只能我一個人擁有,別人是拿不到的

B 密鑰的唯一性,既保證了數(shù)據(jù)的安全(A 密鑰加密的數(shù)據(jù)只能 B 密鑰解密),又能證明我是我(即 B 密鑰只能我一個人擁有)

這便是非對稱加密技術(shù)

非對稱加密有兩個秘鑰,一個是公鑰,一個是私鑰:

  • 公鑰會放在互聯(lián)網(wǎng)上公開;私鑰被自己保存,不能對外泄露
  • 公鑰加密的數(shù)據(jù),只有對應(yīng)的私鑰才可以解密
  • 只有你有私鑰,我才相信你是你

舉個例子,首先咸魚和銀行把自己的公鑰互相給對方,在通信的時候,咸魚用銀行給的公鑰去加密數(shù)據(jù)并發(fā)送給銀行,銀行拿到之后用自己的私鑰解密數(shù)據(jù)

同理,銀行用咸魚提供的公鑰進(jìn)行數(shù)據(jù)加密,然后咸魚拿到加密數(shù)據(jù)之后用自己的私鑰進(jìn)行解密

圖片

TLS/SSL 握手

我們在與銀行通信的時候使用 TLS/SSL 加密傳輸數(shù)據(jù),會有經(jīng)過兩個階段:

  1. TLS/SSL 握手階段:用于建立安全的連接通道(非對稱加密)
  2. 數(shù)據(jù)傳輸階段:通道建立好之后,開始傳輸數(shù)據(jù)(對稱加密)

即在 TLS/SSL 握手階段使用的是非對稱加密技術(shù),數(shù)據(jù)傳輸階段用的是對稱加密技術(shù)

首先網(wǎng)站會公開自己的公鑰(也就是大家常說的“證書”,網(wǎng)站的公鑰是通過數(shù)字證書公開的)

當(dāng)瀏覽器連接到網(wǎng)站時,會先去下載網(wǎng)站的證書

那這里會有一個問題:既然網(wǎng)站的證書是公開的,阿貓阿狗也能下載。那瀏覽器如何知道這個證書的擁有者即對方就是該網(wǎng)站呢?

聰明的小伙伴肯定會想到:只要能證明對方有私鑰就行了!也就是說瀏覽器用證書(即公鑰)加密一個數(shù)據(jù),然后發(fā)送給對方;如果對方有私鑰,那就能解密這個數(shù)據(jù)并返回給瀏覽器,那瀏覽器就知道對方身份了

瀏覽器會驗(yàn)證證書的有效性(包括驗(yàn)證服務(wù)器的身份,檢查證書是否過期,是否由受信任的證書頒發(fā)機(jī)構(gòu)(CA)簽發(fā))

以此來確保正在與合法的網(wǎng)站通信

所以瀏覽器會生成一個隨機(jī)數(shù)(client random),并使用服務(wù)器的公鑰對其進(jìn)行加密,然后將其發(fā)送回服務(wù)器

服務(wù)器使用自己的私鑰解密此數(shù)據(jù),并使用瀏覽器的公鑰對另一個隨機(jī)數(shù)(server random)進(jìn)行加密并發(fā)送回客戶端

這兩個隨機(jī)數(shù)將用于生成會話密鑰,用于之后的對稱加密通信

具體TLS/SSL 握手階段請看:TLS 詳解握手流程 - 掘金 (juejin.cn)

證書頒發(fā)機(jī)構(gòu) CA

前面我們提到:瀏覽器會去驗(yàn)證證書的有效性,其中包括驗(yàn)證證書是否由受信任的證書頒發(fā)機(jī)構(gòu)(CA)簽發(fā)

這個證書頒發(fā)機(jī)構(gòu)(CA,Certification Authority)是一個權(quán)威的第三方機(jī)構(gòu),它的存在是為了告訴瀏覽器:有我做擔(dān)保,你們只管信我;只有網(wǎng)站的擁有者,才能擁有網(wǎng)站的證書

即 CA 在這個過程中充當(dāng)了一個【擔(dān)保人】的角色,當(dāng)瀏覽器拿到網(wǎng)站的證書的時候,會去問 CA :“這個證書是否合法?”

然后 CA 說:“這個證書是合法的!”,瀏覽器才會信任這個網(wǎng)站

網(wǎng)站需要向 CA 申請證書,CA 要對自己頒發(fā)的證書負(fù)責(zé)

最后

以上就是關(guān)于中間人攻擊、TLS/SSL、CA 大致的原理和內(nèi)容。

責(zé)任編輯:武曉燕 來源: 咸魚運(yùn)維雜談
相關(guān)推薦

2020-05-22 08:16:07

PONGPONXG-PON

2021-01-28 22:31:33

分組密碼算法

2024-01-02 13:26:39

TLSC#線程

2018-06-07 13:17:12

契約測試單元測試API測試

2022-08-08 08:25:21

Javajar 文件

2021-08-04 09:32:05

Typescript 技巧Partial

2018-11-29 09:13:47

CPU中斷控制器

2019-02-13 14:15:59

Linux版本Fedora

2021-01-29 08:32:21

數(shù)據(jù)結(jié)構(gòu)數(shù)組

2021-02-06 08:34:49

函數(shù)memoize文檔

2023-05-15 08:38:58

模板方法模式

2022-11-01 08:46:20

責(zé)任鏈模式對象

2020-10-15 06:56:51

MySQL排序

2023-07-06 13:56:14

微軟Skype

2020-09-08 06:54:29

Java Gradle語言

2022-03-08 16:10:38

Redis事務(wù)機(jī)制

2022-03-29 09:56:21

游戲版本運(yùn)營

2018-01-10 14:13:04

測試矩陣API測試

2022-10-08 11:33:56

邊緣計算云計算

2020-08-12 08:34:16

開發(fā)安全We
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號