哈嘍大家好,我是咸魚
當(dāng)我們?cè)谏暇W(wǎng)沖浪的時(shí)候,會(huì)在瀏覽器界面頂部看到一個(gè)小鎖標(biāo)志,或者網(wǎng)址以 "https://" 開頭
這意味著我們正在使用 TLS/SSL 協(xié)議進(jìn)行安全通信。雖然它可能看起來只是一個(gè)小小的鎖圖標(biāo)和一個(gè) “https” ,但實(shí)際上,這個(gè)協(xié)議在保護(hù)我們的在線隱私和安全方面扮演著至關(guān)重要的角色
那今天咸魚就跟大家聊一聊 TLS/SSL 相關(guān)的一些知識(shí)
閱讀文章之前,需要知道:
TLS(Transport Layer Security)和 SSL(Secure Sockets Layer)都是用于加密通信的協(xié)議
TLS 是 SSL 的升級(jí)版本,它修復(fù)了 SSL 中存在的一些安全漏洞,并提供了更高級(jí)的安全性
中間人攻擊
一天中午,咸魚在星巴克里打算上網(wǎng)沖浪一下,這時(shí)候有一個(gè)很壞很壞的人走進(jìn)了星巴克
壞人建了一個(gè)跟星巴克 WI-FI 同名的接入點(diǎn),當(dāng)咸魚上網(wǎng)的時(shí)候,稍微不注意連接到了壞人偽造的那個(gè)假的星巴克 WI-FI,這就導(dǎo)致咸魚任何流量請(qǐng)求都在壞人的監(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)站的時(shí)候,壞人截獲了咸魚這個(gè)請(qǐng)求,并向銀行的網(wǎng)站發(fā)送一個(gè)偽裝請(qǐng)求,假裝是咸魚在請(qǐng)求
銀行以為這個(gè)請(qǐng)求來自于咸魚,于是返回響應(yīng);壞人把這個(gè)響應(yīng)截獲了,然后轉(zhuǎn)發(fā)到咸魚的設(shè)備上
咸魚的設(shè)備認(rèn)為這個(gè)響應(yīng)來自于銀行,于是咸魚看到的是一個(gè)正常的銀行網(wǎng)站登陸界面,便乖乖地輸入了登錄信息(用戶名密碼等)
壞人再次截獲這些信息,然后將其發(fā)送給真正的銀行網(wǎng)站,這時(shí)候壞人已經(jīng)拿到了咸魚的登錄信息
同時(shí),他也繼續(xù)截獲所有咸魚與銀行之間的通信,以便訪問咸魚的銀行賬戶或者進(jìn)行其他惡意活動(dòng)
這便是中間人攻擊(Man-in-the-Middle Attack,簡稱 MITM 攻擊)
中間人攻擊是一種計(jì)算機(jī)安全威脅,攻擊者插入自己在通信的兩端,竊取或篡改信息
這種攻擊可以在不被察覺的情況下進(jìn)行,因?yàn)橥ㄐ诺膬煞秸J(rèn)為他們正在直接相互通信,而實(shí)際上信息經(jīng)過了攻擊者的處理
如何避免遭受中間人攻擊呢?聰明的小伙伴很快就想到了——通過 HTTPS 來進(jìn)行加密通信!這樣即使信息被截獲,壞人也無法輕易解密
TLS/SSL
非對(duì)稱加密
HTTPS 通過 TLS/SSL 來實(shí)現(xiàn)加密傳輸數(shù)據(jù),保證數(shù)據(jù)在傳輸?shù)倪^程中中間人無法解密,這樣就保證了數(shù)據(jù)的安全性
加密數(shù)據(jù)不是什么難題,通信的時(shí)候雙方用密鑰對(duì)數(shù)據(jù)加密就行了
但如果大家跟銀行進(jìn)行加密通信的時(shí)候用的密鑰都是一樣的,中間人依舊能夠使用這個(gè)密鑰去偽造網(wǎng)站然后截獲你的加密數(shù)據(jù)。這樣的話要不要密鑰都沒啥區(qū)別,甚至不還如不要密鑰呢
所以最好的情況就是:我跟銀行通信的時(shí)候協(xié)商好用什么密鑰——用 A 密鑰對(duì)數(shù)據(jù)加密(公鑰),然后用 B 密鑰對(duì)數(shù)據(jù)解密(私鑰),而且:
- A 密鑰加密的數(shù)據(jù)只能 B 密鑰解密
- 這個(gè) B 密鑰只能我一個(gè)人擁有,別人是拿不到的
B 密鑰的唯一性,既保證了數(shù)據(jù)的安全(A 密鑰加密的數(shù)據(jù)只能 B 密鑰解密),又能證明我是我(即 B 密鑰只能我一個(gè)人擁有)
這便是非對(duì)稱加密技術(shù)
非對(duì)稱加密有兩個(gè)秘鑰,一個(gè)是公鑰,一個(gè)是私鑰:
- 公鑰會(huì)放在互聯(lián)網(wǎng)上公開;私鑰被自己保存,不能對(duì)外泄露
- 公鑰加密的數(shù)據(jù),只有對(duì)應(yīng)的私鑰才可以解密
- 只有你有私鑰,我才相信你是你
舉個(gè)例子,首先咸魚和銀行把自己的公鑰互相給對(duì)方,在通信的時(shí)候,咸魚用銀行給的公鑰去加密數(shù)據(jù)并發(fā)送給銀行,銀行拿到之后用自己的私鑰解密數(shù)據(jù)
同理,銀行用咸魚提供的公鑰進(jìn)行數(shù)據(jù)加密,然后咸魚拿到加密數(shù)據(jù)之后用自己的私鑰進(jìn)行解密
TLS/SSL 握手
我們?cè)谂c銀行通信的時(shí)候使用 TLS/SSL 加密傳輸數(shù)據(jù),會(huì)有經(jīng)過兩個(gè)階段:
- TLS/SSL 握手階段:用于建立安全的連接通道(非對(duì)稱加密)
- 數(shù)據(jù)傳輸階段:通道建立好之后,開始傳輸數(shù)據(jù)(對(duì)稱加密)
即在 TLS/SSL 握手階段使用的是非對(duì)稱加密技術(shù),數(shù)據(jù)傳輸階段用的是對(duì)稱加密技術(shù)
首先網(wǎng)站會(huì)公開自己的公鑰(也就是大家常說的“證書”,網(wǎng)站的公鑰是通過數(shù)字證書公開的)
當(dāng)瀏覽器連接到網(wǎng)站時(shí),會(huì)先去下載網(wǎng)站的證書
那這里會(huì)有一個(gè)問題:既然網(wǎng)站的證書是公開的,阿貓阿狗也能下載。那瀏覽器如何知道這個(gè)證書的擁有者即對(duì)方就是該網(wǎng)站呢?
聰明的小伙伴肯定會(huì)想到:只要能證明對(duì)方有私鑰就行了!也就是說瀏覽器用證書(即公鑰)加密一個(gè)數(shù)據(jù),然后發(fā)送給對(duì)方;如果對(duì)方有私鑰,那就能解密這個(gè)數(shù)據(jù)并返回給瀏覽器,那瀏覽器就知道對(duì)方身份了
瀏覽器會(huì)驗(yàn)證證書的有效性(包括驗(yàn)證服務(wù)器的身份,檢查證書是否過期,是否由受信任的證書頒發(fā)機(jī)構(gòu)(CA)簽發(fā))
以此來確保正在與合法的網(wǎng)站通信
所以瀏覽器會(huì)生成一個(gè)隨機(jī)數(shù)(client random),并使用服務(wù)器的公鑰對(duì)其進(jìn)行加密,然后將其發(fā)送回服務(wù)器
服務(wù)器使用自己的私鑰解密此數(shù)據(jù),并使用瀏覽器的公鑰對(duì)另一個(gè)隨機(jī)數(shù)(server random)進(jìn)行加密并發(fā)送回客戶端
這兩個(gè)隨機(jī)數(shù)將用于生成會(huì)話密鑰,用于之后的對(duì)稱加密通信
具體TLS/SSL 握手階段請(qǐng)看:TLS 詳解握手流程 - 掘金 (juejin.cn)
證書頒發(fā)機(jī)構(gòu) CA
前面我們提到:瀏覽器會(huì)去驗(yàn)證證書的有效性,其中包括驗(yàn)證證書是否由受信任的證書頒發(fā)機(jī)構(gòu)(CA)簽發(fā)
這個(gè)證書頒發(fā)機(jī)構(gòu)(CA,Certification Authority)是一個(gè)權(quán)威的第三方機(jī)構(gòu),它的存在是為了告訴瀏覽器:有我做擔(dān)保,你們只管信我;只有網(wǎng)站的擁有者,才能擁有網(wǎng)站的證書
即 CA 在這個(gè)過程中充當(dāng)了一個(gè)【擔(dān)保人】的角色,當(dāng)瀏覽器拿到網(wǎng)站的證書的時(shí)候,會(huì)去問 CA :“這個(gè)證書是否合法?”
然后 CA 說:“這個(gè)證書是合法的!”,瀏覽器才會(huì)信任這個(gè)網(wǎng)站
網(wǎng)站需要向 CA 申請(qǐng)證書,CA 要對(duì)自己頒發(fā)的證書負(fù)責(zé)
最后文章來源:http://www.zghlxwxcb.cn/news/detail-710296.html
以上就是關(guān)于中間人攻擊、TLS/SSL、CA 大致的原理和內(nèi)容,這篇文章花了我較大精力去寫,若是文中有不對(duì)的地方,歡迎指出文章來源地址http://www.zghlxwxcb.cn/news/detail-710296.html
到了這里,關(guān)于聊一聊 TLS/SSL的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!