Https通信過程

Http屬于超文本傳輸協(xié)議,也可以被翻譯成超文本轉(zhuǎn)移協(xié)議,屬于應(yīng)用層協(xié)議,Https不是新的應(yīng)用層協(xié)議,只是在原有的協(xié)議接口替換成了SSL(Secure Socket Layer)和TLS(Transport Layer Security)協(xié)議.

對稱加密

服務(wù)端給客戶端的消息是密文的,只有服務(wù)器和客戶端才能讀懂,就可以保證數(shù)據(jù)的保密性。同時,在交換數(shù)據(jù)之前,驗(yàn)證一下對方的合法身份,就可以保證通信雙方的安全。

服務(wù)器把數(shù)據(jù)加密后服務(wù)器必須要把加密的密鑰告訴客戶端,客戶端才能利用對稱密鑰解開密文的內(nèi)容。但是如果服務(wù)端將這個對稱密鑰以明文的方式發(fā)給Client,還是會被中間人截獲,中間人也會知道對稱密鑰,依然無法保證通信的保密性。

對稱加密.png

對稱加密+非對稱加密

之前的對稱加密,解密的密鑰很容易被獲取,非對稱加密解密算法里,公鑰加密的數(shù)據(jù),有且只有唯一的私鑰才能夠解密,所以服務(wù)器只要把公鑰發(fā)給客戶端,客戶端就可以用這個公鑰來加密進(jìn)行數(shù)據(jù)傳輸?shù)膶ΨQ密鑰。

客戶端利用公鑰將對稱密鑰發(fā)給服務(wù)器時,即使中間人截取了信息,也無法解密,因?yàn)樗借€只部署在服務(wù)器,其他任何人都沒有私鑰,因此,只有服務(wù)器才能夠解密。服務(wù)器拿到客戶端的信息并用私鑰解密之后,就可以拿到加解密數(shù)據(jù)用的對稱密鑰,通過這個對稱密鑰來進(jìn)行后續(xù)通信的數(shù)據(jù)加解密。

但是同樣的存在一個安全問題,就是中間人自己制造了一套公鑰和私鑰,同樣可以獲取通信內(nèi)容,如下圖所示:

非對稱加密.png

數(shù)字證書

避免中間人偽造自己的公鑰和私鑰,服務(wù)器首先生成公私鑰,然后將公鑰提供給相關(guān)機(jī)構(gòu)(CA)。CA是Certificate Authority的縮寫,也叫“證書授權(quán)中心”。CA將服務(wù)端公鑰放入數(shù)字證書并將數(shù)字證書頒布給服務(wù)器(其實(shí)主要就是利用CA的私鑰給Server的公鑰打上標(biāo)簽,由于私鑰無法偽造,從而可保證唯一性).

數(shù)字證書中加入了數(shù)字簽名的機(jī)制,保證數(shù)字證書一定是服務(wù)端發(fā)給客戶端的,即使中間人想發(fā)送一個偽造的證書,但是由于CA不會給它頒發(fā)這個證書(因?yàn)樗鼪]有經(jīng)營這個網(wǎng)站的資質(zhì)嘛,所以CA的信譽(yù)、對申請者的審核、對自己私鑰的保管這3點(diǎn)非常重要,任何一環(huán)出問題,都會導(dǎo)致中間人有機(jī)可乘,從而重蹈1.2的覆轍) ,從而無能為力.

數(shù)字簽名簽發(fā)和校驗(yàn)使用的非對稱密鑰是CA自己的公鑰和私鑰,跟證書申請者(提交證書申請的公司實(shí)體)提交的公鑰沒有任何關(guān)系。
根CA證書都是自簽名,即用自己的公鑰和私鑰完成了簽名的制作和驗(yàn)證。而證書鏈上的證書簽名都是使用上一級證書的非對稱密鑰進(jìn)行簽名和驗(yàn)證的。根CA和多級CA的密鑰對都是自簽名和自認(rèn)證,因?yàn)檫@些廠商跟瀏覽器和操作系統(tǒng)都有合作,它們的根公鑰都默認(rèn)裝到了瀏覽器或者操作系統(tǒng)環(huán)境里。

通信過程

之前的過程基本上接近真正的通信過程,會有兩次非對稱加密和一次對稱加密,真正的Https過程如下:
①客戶端發(fā)起SSL通信,報文中包含客戶端支持的SSL的指定版本,加密組件列表(加密算法及密碼長度)

②服務(wù)端通過SSL通信,將SSL版本及加密算法版本中的一組發(fā)送至客戶端.

③服務(wù)端發(fā)送客戶端Certificate報文,報文中包含公開密鑰證書.

④客戶端驗(yàn)證證書的合法性(頒發(fā)證書的機(jī)構(gòu)是否合法,證書中包含的網(wǎng)站地址是否與正在訪問的地址一致等) ,如果證書受信任,則瀏覽器欄里面會顯示一個小鎖頭,否則會給出證書不受信的提示;
如果證書受信任,或者用戶接受了不受信的證書,客戶端會生成一個Pre-master secret的隨機(jī)密碼串,并且通過接受到公鑰加密.

⑤服務(wù)端會通過私鑰解密出Pre-master sercret隨機(jī)密碼串,通過Pre-master sercret解密密發(fā)來的握手信息,并驗(yàn)證Hash是否與瀏覽器發(fā)來的一致.之后通過密碼加密一段握手信息,發(fā)給客戶端.

⑥客戶端解密并計算握手信息的Hash,如果與Server發(fā)來的Hash一致,此時握手過程結(jié)束,利用對稱加密算法進(jìn)行加密.

參考鏈接:
HTTPS為什么安全 &分析 HTTPS 連接建立全過程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容