https原理和流程
https實(shí)際上是使用SSL/TLS對(duì)傳輸數(shù)據(jù)進(jìn)行加密的HTTP通信.
如果不使用SSL/TLS的話, 所有的數(shù)據(jù)是明文傳輸, 很容易被截取進(jìn)行中間人攻擊.帶來(lái)的風(fēng)險(xiǎn)有:
- 竊聽風(fēng)險(xiǎn): 第三方可以獲知通信內(nèi)容.
- 篡改風(fēng)險(xiǎn): 第三方可以修改通信內(nèi)容.
- 冒充風(fēng)險(xiǎn): 第三方可以冒充他任身份進(jìn)行通信.
使用SSL/TSL協(xié)議可以規(guī)避這些風(fēng)險(xiǎn):
- 所有信息都是加密傳播耳璧,第三方無(wú)法竊聽。
- 具有校驗(yàn)機(jī)制赵誓,一旦被篡改,通信雙方會(huì)立刻發(fā)現(xiàn)沥曹。
- 配備身份證書,防止身份被冒充捅厂。
基本的運(yùn)行過程:
基本的運(yùn)行過程是, 客戶端先向服務(wù)器索要公鑰, 然后用公鑰加密信息, 服務(wù)器收到密文后, 用自己的私鑰解密.
但是這里面有兩個(gè)個(gè)問題:
- 如何保證公鑰可信?
解決方法:
公鑰放在數(shù)字證書中, 證書頒發(fā)機(jī)構(gòu)作為公鑰背書.
- 公鑰加密計(jì)算量太大,效率不高.
解決方法:
每一次會(huì)話, 單獨(dú)生成一個(gè)對(duì)話密鑰(session-key), 用他來(lái)解密信息.
由于對(duì)話密鑰是對(duì)稱加密, 所以加密和解密速度都非程匠鳎快.
服務(wù)器公私鑰只用來(lái)加密解密對(duì)話密鑰.
具體的流程:
開始加密通信之前,客戶端和服務(wù)器首先必須建立連接和交換參數(shù)蛮放,這個(gè)過程叫做握手(handshake)缩抡。
假定客戶端叫做愛麗絲,服務(wù)器叫做鮑勃包颁,整個(gè)過程如下:
- 愛麗絲給出協(xié)議版本號(hào)瞻想、一個(gè)客戶端生成的隨機(jī)數(shù)(Client random),以及客戶端支持的加密方法娩嚼。
- 鮑勃確認(rèn)雙方使用的加密方法蘑险,并給出數(shù)字證書、以及一個(gè)服務(wù)器生成的隨機(jī)數(shù)(Server random)岳悟。
- 愛麗絲確認(rèn)數(shù)字證書有效佃迄,然后生成一個(gè)新的隨機(jī)數(shù)(Premaster secret),并使用數(shù)字證書中的公鑰贵少,加密這個(gè)隨機(jī)數(shù)呵俏,發(fā)給鮑勃。
- 鮑勃使用自己的私鑰滔灶,獲取愛麗絲發(fā)來(lái)的隨機(jī)數(shù)(即Premaster secret)普碎。
- 愛麗絲和鮑勃根據(jù)約定的加密方法,使用前面的三個(gè)隨機(jī)數(shù)录平,生成"對(duì)話密鑰"(session key)麻车,用來(lái)加密接下來(lái)的整個(gè)對(duì)話過程。
其中關(guān)鍵是第三步, 由客戶端生成的隨機(jī)數(shù), 使用公鑰加密. 即使中間人獲得這個(gè)數(shù)據(jù), 因?yàn)闆]有私鑰, 也無(wú)法獲得通信內(nèi)容.