在HTTP協(xié)議中有可能存在信息竊聽或身份偽裝等安全問題颤绕。使用HTTPS通信機(jī)制可以有效地防止這些問題熬甚。
HTTP的缺點(diǎn)
- 通信使用明文(不加密)喉酌,內(nèi)容可能會(huì)被竊聽
- 不驗(yàn)證通信方的身份完箩,因此有可能遭遇偽裝
- 無(wú)法證明報(bào)文的完整性铁蹈,所以有可能已遭篡改
HTTP+加密+認(rèn)證+完整性保護(hù)=HTTPS
HTTPS是身披SSL外殼的HTTP
HTTPS并非是應(yīng)用層的一種新協(xié)議宽闲。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)協(xié)議代替而已。
通常木缝,HTTP直接和TCP通信便锨。當(dāng)使用SSL時(shí),則演變成先和SSL通信我碟,再由SSL和TCP通信了放案。
在采用SSL后,HTTP就擁有了HTTPS的加密矫俺、證書和完整性功能吱殉。
HTTPS采用混合加密機(jī)制
HTTPS采用共享密鑰加密和公開密鑰加密兩者并用的混合加密機(jī)制。若密鑰能夠?qū)崿F(xiàn)安全交換厘托,那么有可能會(huì)考慮僅使用公開密鑰加密來(lái)通信能真。但是公開密鑰加密與共享密鑰加密相比勇吊,其處理速度要慢延蟹。
所以應(yīng)充分利用兩者各自的優(yōu)勢(shì)每辟,將多種方法組合起來(lái)用于通信。在交換密鑰環(huán)節(jié)使用公開密鑰加密方式包斑,之后的建立通信交換報(bào)文階段則使用共享密鑰加密方式流礁。
證明公開密鑰正確性的證書
如何證明收到的的公開密鑰就是原本預(yù)想的那臺(tái)服務(wù)器發(fā)行的公開密鑰涕俗?為了解決這個(gè)問題,可以使用由數(shù)字證書認(rèn)證機(jī)構(gòu)(CA神帅,Certificate Authority)頒發(fā)的公開密鑰證書再姑。
首先,服務(wù)器的運(yùn)營(yíng)人員向數(shù)字證書認(rèn)證機(jī)構(gòu)提出公開密鑰的申請(qǐng)找御。數(shù)字證書認(rèn)證機(jī)構(gòu)在判明提出申請(qǐng)者的身份之后,會(huì)對(duì)已申請(qǐng)的公開密鑰做數(shù)字簽名霎桅,然后分配這個(gè)已簽名的公開密鑰栖疑,并將該公開密鑰放入公鑰放入公鑰證書后綁定在一起。
服務(wù)器會(huì)將這份由數(shù)字證書認(rèn)證機(jī)構(gòu)頒發(fā)的公鑰證書發(fā)送給客戶端哆档,以進(jìn)行公鑰加密方式通信蔽挠。
接到證書的客戶端可使用數(shù)字證書認(rèn)證機(jī)構(gòu)的公開密鑰,對(duì)那張證書上的數(shù)字簽名進(jìn)行驗(yàn)證雇寇,一旦驗(yàn)證通過锨侯,客戶端便可明確兩件事:一,認(rèn)證服務(wù)器的公開密鑰的是真實(shí)有效的數(shù)字證書認(rèn)證機(jī)構(gòu)冬殃。二囚痴,服務(wù)器的公開密鑰是值得信賴的审葬。
多數(shù)瀏覽器開發(fā)商發(fā)布版本時(shí)深滚,會(huì)事先在內(nèi)部植入常用認(rèn)證機(jī)構(gòu)的公開密鑰。
HTTPS的安全通信機(jī)制
步驟1:客戶端通過發(fā)送Client Hello報(bào)文開始SSL通信涣觉。報(bào)文中包含客戶端支持的SSL的指定版本痴荐、加密組件(Cipher Sutie)列表(所有使用的加密算法及密鑰長(zhǎng)度等)。
步驟2:服務(wù)器可進(jìn)行SSL通信時(shí)官册,會(huì)以Server Hello報(bào)文作為應(yīng)答生兆。和客戶端一樣,在報(bào)文中包含SSL版本以及加密組件膝宁。服務(wù)器的加密組件內(nèi)容從接收到的客戶端加密組件內(nèi)篩選出來(lái)的鸦难。
步驟3:之后服務(wù)器發(fā)送Certificate報(bào)文栖榨。報(bào)文中包含公開密鑰證書。
步驟4:最后服務(wù)器發(fā)送Server Hello Done報(bào)文通知客戶端明刷,最初階段的SSL握手協(xié)商部分結(jié)束婴栽。
步驟5:SSL第一次握手結(jié)束之后,客戶端以Client Key Exchange報(bào)文作為回應(yīng)辈末。報(bào)文中包含通信加密中使用的一種被稱為Pre-master secret的隨機(jī)密碼串愚争。該報(bào)文已用步驟3中的公開密鑰進(jìn)行加密。
步驟6:接著客戶端繼續(xù)發(fā)送Change Cipher Spec報(bào)文挤聘。該報(bào)文會(huì)提示服務(wù)器轰枝,在此報(bào)文之后的通信會(huì)采用Pre-master secret密鑰加密。
步驟7:客戶端發(fā)送Finished報(bào)文组去。該報(bào)文包含連接至今全部報(bào)文的整體校驗(yàn)值鞍陨。
步驟8:服務(wù)器同樣發(fā)送Change Cipher Spec報(bào)文。
步驟9:服務(wù)器同樣發(fā)送Finished報(bào)文从隆。
步驟10:服務(wù)器和客戶端的Finished報(bào)文交換完畢后诚撵,SSL連接就算建立完成。從此處開始進(jìn)行應(yīng)用層協(xié)議的通信键闺,即發(fā)送HTTP請(qǐng)求寿烟。
步驟11:應(yīng)用層協(xié)議通信,即發(fā)送HTTP響應(yīng)辛燥。
步驟12:最后由客戶端斷開連接筛武。
在以上流程中,應(yīng)用層發(fā)送數(shù)據(jù)時(shí)會(huì)附加一種叫做MAC(Message Authentication Code)的報(bào)文摘要挎塌。MAC能夠查知報(bào)文是否遭到篡改徘六。
為什么不一直使用HTTPS
因?yàn)榕c純文本通信相比,加密通信會(huì)消耗更多的CPU及內(nèi)存資源榴都。如果每次通信都加密待锈,會(huì)消耗相當(dāng)多的資源。