文章目錄
- HTTPS VS HTTP
- HTTPS=HTTP+加密+證書+完整性保護(hù)
- 加密
- 對稱加密
- 非對稱加密
- 混合加密
- 證書
- 完整性保護(hù)
- 加密
- HTTPS并不能取代HTTP
- SSL是把雙刃劍
- HTTPS的遺憾之處
HTTPS VS HTTP
計(jì)算機(jī)網(wǎng)絡(luò) (二) 應(yīng)用層 :HTTP協(xié)議詳解
在之前的文章中介紹了HTTP協(xié)議,雖然從中了解了他優(yōu)秀的一面,但是也能看到他許多的不足。
由于其本身通信使用明文,沒有進(jìn)行加密,也沒有確認(rèn)通信方的一種機(jī)制,所以在互聯(lián)網(wǎng)上近似于裸奔,很容易就會(huì)受到中間人攻擊,導(dǎo)致安全存在問題。
通信時(shí)數(shù)據(jù)并沒有進(jìn)行加密,而是使用明文,很容易就會(huì)被竊聽
沒有驗(yàn)證通信對象的機(jī)制,導(dǎo)致了可能會(huì)有人假扮客戶端進(jìn)行通信
無法驗(yàn)證報(bào)文的完整性,中途可能被人篡改,自己又無法確認(rèn)
HTTP的主要缺點(diǎn)如下
- 通信使用明文,內(nèi)容可能會(huì)被竊聽
- 不驗(yàn)證通信方的身份,因此有可能遭遇偽裝
- 無法驗(yàn)證報(bào)文的完整性,有可能遭到篡改
為了彌補(bǔ)上述缺點(diǎn),HTTPS就誕生了,HTTPS并不是一個(gè)新的協(xié)議,而是身披SSL外殼的HTTP,通過引入加密,證書,完整性保護(hù)來保證了他的安全。
HTTPS=HTTP+加密+證書+完整性保護(hù)
加密
對稱加密
對稱密鑰加密也叫做共享密鑰加密,其實(shí)就是加密和解密采用了同一個(gè)密鑰
雙方在進(jìn)行通信時(shí),發(fā)送方會(huì)利用密鑰進(jìn)行加密,再將密鑰一同發(fā)送給接收方,讓其使用這個(gè)密鑰進(jìn)行解密。
這種方法看起來不錯(cuò),但是也存在問題,如果在發(fā)送的時(shí)候被攔截下來,密鑰就會(huì)泄露給中間人,此時(shí)中間人就可以通過密鑰來對之后的數(shù)據(jù)進(jìn)行解密,此時(shí)也就失去了加密的意義
這時(shí),就引入了非對稱加密
非對稱加密
非對稱加密又叫做公開密鑰加密,他使用一對非對稱的密鑰,一把叫做私有密鑰,一把叫做公有密鑰。故名思意,共有密鑰是公開的,任何人都可以獲得,而私有密鑰則不能讓任何人知道
當(dāng)進(jìn)行通信時(shí),發(fā)送方使用對方的公有密鑰進(jìn)行加密,而接收方接收時(shí)則使用自己的私有密鑰進(jìn)行解密,這樣一來,用于解密的私鑰就完全掌握在接收者自己手里,中間人也無法從中竊取密鑰,安全也一定程度的得到了保障。
混合加密
但是,從上面的描述也可以看出來,由于非對稱加密的處理比起對稱加密來說較為復(fù)雜,所以如果在通信時(shí)一直使用非對稱加密,就會(huì)導(dǎo)致通信的效率大大的降低,所以HTTPS采用對稱加密和非對稱加密并用的混合加密機(jī)制
具體怎么做呢?
- 使用非對稱加密的方式來交換之后用來進(jìn)行加密解密的對稱加密密鑰
(因?yàn)閷ΨQ加密的主要問題就是無法確保密鑰是否安全,而此時(shí)采用非對稱加密來傳輸密鑰,就能很好的規(guī)避這個(gè)問題) - 在確保之前交換安全的情況下,使用對稱加密密鑰來進(jìn)行通信
(而非對稱加密的最大問題就在于其復(fù)雜的處理機(jī)制導(dǎo)致效率降低,所以在安全的情況下使用對稱加密就可以大大提高效率)
證書
雖然數(shù)據(jù)得到了加密,不至于明文裸奔,但是這時(shí)以及安全了嗎?
答案是否定的,我們還需要考慮到HTTP的第二個(gè)缺點(diǎn),沒有驗(yàn)證對象。
假設(shè)這樣一個(gè)情景,小明和小張進(jìn)行通信,中間人在雙方第一次通信時(shí)就截獲了小明的公鑰,即使無法使用私鑰解密,但是他仍然想出了一個(gè)壞點(diǎn)子——偷天換日,此時(shí)他冒充小明,將自己生成的公鑰發(fā)送給小張。
此時(shí)小張誤以為他就是小明,所以使用中間人的公鑰進(jìn)行加密,將對稱加密的密鑰發(fā)送了過去。
此時(shí)中間人就可以通過自己的私鑰來進(jìn)行解密,于是就獲取了對稱加密的密鑰。之后他接著使壞——此時(shí)再偽裝成小張,將密鑰再一次加密后發(fā)送給小明,此時(shí)小明也認(rèn)為他就是小張。
通過這種手法,中間人就能在雙方都不知情的情況下,掌握了雙方的對稱加密密鑰,輕松的截取了雙方的通信內(nèi)容。
為了解決這個(gè)問題,HTTPS引入了數(shù)字證書這一機(jī)制。
服務(wù)器的運(yùn)營人員會(huì)向數(shù)字證書認(rèn)證機(jī)構(gòu)來進(jìn)行認(rèn)證,在機(jī)構(gòu)對其驗(yàn)明身份之后,就會(huì)對服務(wù)器的公鑰做一個(gè)數(shù)字簽名,并且將公鑰放入公鑰證書后綁定在一起。
此時(shí)當(dāng)客戶端接收到服務(wù)器發(fā)送的公鑰證書的時(shí)候,就會(huì)向證書認(rèn)證機(jī)構(gòu)來驗(yàn)證數(shù)字簽名是否正確,來判斷該公鑰是否遭到替換,確保了公鑰的真實(shí)性。
此時(shí)即使中間人想仿造公鑰證書,但也因?yàn)闊o法通過機(jī)構(gòu)的驗(yàn)證而被識(shí)破。
此時(shí),中間人就沒有使壞的空間了。
這就是HTTPS使用加密以及證書來確保安全的整個(gè)流程
完整性保護(hù)
在上面的流程中,應(yīng)用層發(fā)送數(shù)據(jù)的時(shí)候會(huì)附加mac報(bào)文摘要,MAC能夠查知報(bào)文是否遭受到篡改,從而讓保護(hù)報(bào)文的完整性。
HTTPS并不能取代HTTP
SSL是把雙刃劍
HTTPS也叫做披著SSL外殼的HTTP,在通信接口部分他使用了SSL和TLS來進(jìn)行代替。
對于HTTP協(xié)議來說,他直接和TCP進(jìn)行通信。
而HTTPS為了保證安全,使用了SSL來提供保障,通信時(shí)首先與SSL進(jìn)行通信,再由SSL來與TCP進(jìn)行通信,正是因?yàn)橛蒘SL的存在,才使得HTTP具備了HTTPS的加密、證書、安全性保障這些功能。
但是成也蕭何,敗也蕭何,SSL為HTTPS保障安全的同時(shí),也降低了他的效率
SSL主要慢在兩個(gè)方面
- 和HTTP相比,網(wǎng)絡(luò)負(fù)載可能會(huì)變慢2到100倍。由于HTTPS還需要額外進(jìn)行SSL通信,整體上處理通信量不可避免的增加了。
- SSL為了確保安全,在客戶端和服務(wù)端都需要進(jìn)行大量的加密和解密的運(yùn)算處理,導(dǎo)致其比起HTTP來說會(huì)更多的消耗服務(wù)器和客戶端的硬件資源,導(dǎo)致負(fù)載增強(qiáng)。
HTTPS的遺憾之處
- SSL的高度安全帶來的低效率以及高負(fù)載使得HTTPS并不會(huì)一直使用(或者干脆不用)
(對于高訪問量的Web網(wǎng)站來說,進(jìn)行大量的加密解密出來帶來的負(fù)載十分龐大,并且對于非敏感信息(可公開信息)也沒有加密的必要,所以大多數(shù)網(wǎng)站并不會(huì)一直使用HTTPS,而是只在進(jìn)行私密內(nèi)容傳輸?shù)臅r(shí)候才會(huì)使用,來確保資源的節(jié)約。) - 數(shù)字證書的高昂成本使得個(gè)人網(wǎng)站及非盈利網(wǎng)站望而卻步
(要進(jìn)行HTTPS通信,數(shù)字證書是必不可少的,但是對于一些非盈利的網(wǎng)站以及個(gè)人網(wǎng)站來說,每年用來購買數(shù)字證書帶來的花銷并不是一個(gè)小數(shù)目,所以大多還是繼續(xù)使用HTTP