前言:
大家好,我是良辰丫,這篇文章我們就來學(xué)習(xí)一下Https協(xié)議,了解Https的工作原理,對稱加密以及非對稱加密.??????
??個(gè)人主頁:良辰針不戳
??所屬專欄:javaEE初階
??勵(lì)志語句:生活也許會(huì)讓我們遍體鱗傷,但最終這些傷口會(huì)成為我們一輩子的財(cái)富。
??期待大家三連,關(guān)注,點(diǎn)贊,收藏。
??作者能力有限,可能也會(huì)出錯(cuò),歡迎大家指正。
??愿與君為伴,共探Java汪洋大海。
1. 初識(shí)Https
1.1 走進(jìn)https
Https和Http看起來大同小異,有什么區(qū)別呢?
其實(shí),Https是在Http上進(jìn)行衍生的,Https相比于Http,只是在其基礎(chǔ)上加了一個(gè)加密層.
那么,為什么要有Https呢?
- 在網(wǎng)絡(luò)上進(jìn)行傳輸數(shù)據(jù),很容易被運(yùn)營商劫持,因?yàn)橐郧熬W(wǎng)絡(luò)上的數(shù)據(jù)是明文傳輸?shù)?有被篡改的風(fēng)險(xiǎn).
- 百度在自己的瀏覽器打一個(gè)廣告,廣告主會(huì)根據(jù)一定的規(guī)則支付百度廣告費(fèi),但是由于運(yùn)營商劫持,本應(yīng)該給百度的廣告費(fèi),成了運(yùn)營商的了.這樣顯然是不合理的.
- 為什么會(huì)出現(xiàn)上述的問題呢?
http沒有加密層,很容易被篡改數(shù)據(jù),咱們的https主要的內(nèi)容是為了防止篡改,而不是防止被查看.- 因此呢,我們就引入了https,可以有效的改善上述的問題.
1.2 http存在的問題
- 竊聽風(fēng)險(xiǎn),比如通信鏈路上可以獲取通信內(nèi)容,用戶號(hào)容易沒。
- 篡改風(fēng)險(xiǎn),比如強(qiáng)制植入垃圾廣告,視覺污染。
- 冒充風(fēng)險(xiǎn),比如冒充淘寶網(wǎng)站,個(gè)人賬戶會(huì)有安全風(fēng)險(xiǎn)。
1.3 https的優(yōu)點(diǎn)
HTTPS 在 HTTP 與 TCP 層之間加入了 SSL/TLS 協(xié)議,可以很好的解決了上述的風(fēng)險(xiǎn):
- 信息加密:交互信息無法被竊取,但有時(shí)候你在瀏覽器里面的登錄信息可能沒有以前保存的那么深。
- 校驗(yàn)機(jī)制:無法篡改通信內(nèi)容,篡改了就不能正常顯示。
- 身份證書:相關(guān)機(jī)構(gòu)證明該網(wǎng)站是否被篡改過。
HTTPS 是如何解決上面的三個(gè)風(fēng)險(xiǎn)的?(簡單了解即可,畢竟密碼學(xué)很難,學(xué)習(xí)不是輕而易舉的.)
- 混合加密的方式實(shí)現(xiàn)信息的機(jī)密性,解決了竊聽的風(fēng)險(xiǎn)。
- 摘要算法的方式來實(shí)現(xiàn)完整性,它能夠?yàn)閿?shù)據(jù)生成獨(dú)一無二的「指紋」,指紋用于校驗(yàn)數(shù)據(jù)的完整性,解決了篡改的風(fēng)險(xiǎn)。
- 將服務(wù)器公鑰放入到數(shù)字證書中,解決了冒充的風(fēng)險(xiǎn)。
2. 運(yùn)營商劫持
上述提到了運(yùn)營商劫持,但是大家獲取對這個(gè)概念還有一些陌生,那么我們就來詳細(xì)的說明一下.
有時(shí)候咱們明明下載A軟件,下載下來卻不是我們要的軟件, 其實(shí)大多數(shù)情況下這就是一種運(yùn)營商劫持.
- 客戶端獲取一個(gè)下載A軟件的鏈接,在這個(gè)過程中被運(yùn)營商劫持了,運(yùn)營商知道了客戶端的需求.
- 運(yùn)營商為了不讓自己被懷疑,把客戶端的獲取需求(下載A軟件鏈接)發(fā)送給A軟件服務(wù)器.
- A軟件服務(wù)器返回一個(gè)A軟件的鏈接,這個(gè)時(shí)候,又被運(yùn)營商劫持了,運(yùn)營商把A軟件的鏈接替換成自己的,然后返回給客戶端,客戶端就會(huì)收到下載B軟件的鏈接.
- 客戶端不知道會(huì)這樣,下載之后,發(fā)現(xiàn)不是自己要的軟件.
3. Https的工作過程
3.1 對稱加密
所謂對稱加密
只有一個(gè)秘鑰key,加密和解密使用同一個(gè)秘鑰key(私鑰).對稱加密速度比較快.
- 明文 + key = 密文
- 密文 + key = 明文
下圖簡單描述了一個(gè)對稱加密解密的過程.
下圖引入了黑客,黑客雖然獲取了密文,但是如果黑客沒有私鑰key,是不能進(jìn)行解密,也就無法篡改數(shù)據(jù),這樣數(shù)據(jù)的安全性就大大提高了.
對稱加密中那么多客戶端使用的秘鑰是否是相同的?
每個(gè)客戶端使用不同的秘鑰,如果秘鑰相同,黑客也可以偽裝客戶端獲取秘鑰,那樣數(shù)據(jù)就不安全了.
客戶端需要自己生成一個(gè)秘鑰,那么生成的秘鑰如何告訴服務(wù)器呢?
- 這個(gè)時(shí)候就需要網(wǎng)絡(luò)傳輸秘鑰,一旦通過網(wǎng)絡(luò)進(jìn)行傳輸,那么黑客就可能截獲到秘鑰.
- 那么給秘鑰key進(jìn)行加密,加密的話還需要一個(gè)新的秘鑰key2,那么key2也需要進(jìn)行加密,要不然很容易就被破解了,這樣套娃顯然是不科學(xué)的.
對稱加密有很多的缺陷,因此呢,我們引入了非對稱加密.
3.2 非對稱加密
所謂非對稱加密
需要兩個(gè)秘鑰,一個(gè)公鑰,一個(gè)私鑰.
- 明文 + 公鑰 = 密文
- 密文 + 私鑰 = 明文
3.2.1 普通非對稱加密
那么怎么理解非對稱加密呢?兩個(gè)秘鑰,一個(gè)公鑰,一個(gè)私鑰.完全不一樣的兩個(gè)秘鑰,為什么可以一個(gè)用來加密,一個(gè)用來解密呢?
- 這是密碼學(xué)里的知識(shí),我們也不做過多的討論.
- 只是簡單的舉個(gè)例子方便大家理解.我們可以想象成公鑰是一個(gè)人可以給很多鎖上鎖,但是解鎖需要自己那把匹配的鑰匙才可以,私鑰就是那把匹配的鑰匙,只有擁有了那把匹配的鑰匙才能對密文進(jìn)行解密.
可能圖畫的有點(diǎn)亂哈哈,我就簡單的用語言描述一下過程.
- 客戶端向服務(wù)器索要公鑰,這個(gè)公鑰一般別人都可以獲取到,服務(wù)器把公鑰返回給客戶端.
- 客戶端把秘鑰key用公鑰進(jìn)行加密,注意這里是加密key,并不是傳輸?shù)臄?shù)據(jù).把加密后的密文傳輸給服務(wù)器.
- 服務(wù)器使用私鑰對這個(gè)密文進(jìn)行解密,得到key,然后服務(wù)器向客戶端返回一個(gè)已經(jīng)得到key的消息.
- 客戶端拿key對傳輸?shù)男畔⑦M(jìn)行加密,因?yàn)楹诳筒恢纊ey是什么,因此不能對數(shù)據(jù)進(jìn)行解密.客戶端把加密的數(shù)據(jù)發(fā)送給服務(wù)器,服務(wù)器拿著key對信息進(jìn)行解密,得到數(shù)據(jù).
注意:
- 客戶端和服務(wù)器進(jìn)行業(yè)務(wù)數(shù)據(jù)傳輸?shù)臅r(shí)候,仍然是使用對稱加密方式,因?yàn)閷ΨQ加密速度快,成本低.
- 為了保證數(shù)據(jù)的安全性,咱們采用非對稱的加密方式,非對稱加密采取公鑰加密,私鑰解密的方式.這里需要注意的是,我們用公鑰加密的是key,并不是數(shù)據(jù).
- 非對稱加密在傳輸完秘鑰key之后就不會(huì)再使用了,之后就會(huì)使用對稱加密.
那么,非對稱安全之后就絕對安全嘛?辦法總比困難多,黑客是非常聰明的,它會(huì)自己生成非對稱秘鑰進(jìn)行一系列的操作.接下來我們就來看一下中間人攻擊.
3.2.2 中間人攻擊
- 黑客自己生成一對非對稱秘鑰,公鑰2和私鑰2.
- 客戶端向服務(wù)器索要公鑰,服務(wù)器返回公鑰后被黑客截取,黑客把公鑰替換成自己的公鑰2,然后發(fā)給客戶端.
- 客戶端把秘鑰key用公鑰2進(jìn)行加密,把加密后的密文發(fā)送出去,黑客獲取到密文,通過自己的私鑰2解密得到key,然后用服務(wù)器的公鑰對key進(jìn)行加密,發(fā)給服務(wù)器.做到神不知鬼不覺.
- 服務(wù)器使用私鑰對這個(gè)密文進(jìn)行解密,得到key.
- 客戶端拿key對傳輸?shù)男畔⑦M(jìn)行加密,進(jìn)行傳輸加密的消息,此時(shí)黑客有了秘鑰key,可以對消息進(jìn)行解密.這樣客戶端的數(shù)據(jù)就被黑客獲取了.
那么如何避免中間人攻擊呢?
這里的關(guān)鍵是要讓客戶端信任公鑰,公鑰到底是從哪里來的,我們一定要對此有一定的認(rèn)知.
3.2.3 引入證書的非對稱加密
- 服務(wù)器向權(quán)威機(jī)構(gòu)申請一個(gè)證書.
- 客戶端向服務(wù)器索要證書,客戶端拿到證書后,需要對證書進(jìn)行校驗(yàn).
得到初識(shí)的簽名,客戶端的系統(tǒng)中內(nèi)置了權(quán)威機(jī)構(gòu)的公鑰2,針對上述證書的加密簽名進(jìn)行解密,這樣就得到了初始簽名,這個(gè)簽名是根據(jù)權(quán)威機(jī)構(gòu)計(jì)算出來的.
計(jì)算現(xiàn)在的簽名,客戶端使用同樣的簽名計(jì)算方法,基于證書中的屬性重新計(jì)算.
比較上述兩個(gè)簽名是否相同,如果相同,說明證書中的數(shù)據(jù)都是未被篡改過的數(shù)據(jù);如果簽名不相同,那么說明證書中的數(shù)據(jù)被篡改過,這個(gè)時(shí)候客戶端的瀏覽器彈框報(bào)錯(cuò).
那么,黑客為什么不能篡改證書的數(shù)據(jù)呢,黑客如何進(jìn)行篡改操作呢?
- 黑客把整數(shù)中的服務(wù)器公鑰替換成自己的公鑰.
- 黑客針對證書中的各個(gè)屬性,重新計(jì)算簽名.
- 這個(gè)時(shí)候黑客要把簽名重新進(jìn)行加密,要想重新加密,需要知道權(quán)威機(jī)構(gòu)的私鑰,黑客是沒法獲取權(quán)威機(jī)構(gòu)的私鑰.
看了上面的引入證書的非對稱加密,是不是有點(diǎn)迷糊呢?不是難,而是所涉及的東西多了一點(diǎn),那么我們再來描述一下.文章來源:http://www.zghlxwxcb.cn/news/detail-498974.html
- 我們先來認(rèn)識(shí)一下上面是證書,證書是權(quán)威機(jī)構(gòu)的證明,證書上面有很多屬性,普通的非對稱加密,客戶端向服務(wù)器獲取公鑰,這個(gè)時(shí)候很容易受到中間人攻擊;在我們引入證書的非對稱加密中,客戶端向服務(wù)器獲取的證書,證書上面包含公鑰,簽名等屬性,幾乎沒有可能被篡改.
- 證書上的簽名是加密的,針對證書的所有屬性,計(jì)算一個(gè)校驗(yàn)和(簽名),再由證書頒布機(jī)構(gòu)使用自己的私鑰對這個(gè)簽名進(jìn)行加密.
- 數(shù)據(jù)相同,按照相同的算法會(huì)得到同樣的簽名.
- 黑客可以把簽名進(jìn)行解密,但是要想加密需要借助權(quán)威機(jī)構(gòu)的私鑰,黑客是沒有辦法獲取這個(gè)私鑰.
- 權(quán)威機(jī)構(gòu)又是什么呢?權(quán)威機(jī)構(gòu)是網(wǎng)絡(luò)辦理各種證書的,這樣的機(jī)構(gòu)也是相當(dāng)少的,一般計(jì)算機(jī)系統(tǒng)會(huì)內(nèi)置這個(gè)的證書.
后序:
今天Https協(xié)議相關(guān)協(xié)議的內(nèi)容到這里就結(jié)束了,想必大家學(xué)到了很多,我們下一篇文章再見.??????文章來源地址http://www.zghlxwxcb.cn/news/detail-498974.html
到了這里,關(guān)于【Https協(xié)議】http的孿生兄弟,你了解多少呢,認(rèn)識(shí)Https,Https工作原理之對稱加密與非對稱加密的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!