HTTPS相對于HTTP有哪些不同呢?其實就是在HTTP跟TCP中間加多了一層加密層TLS/SSL。
什么是TLS/SSL?
通俗的講,TLS、SSL其實是類似的東西,SSL是個加密套件,負(fù)責(zé)對HTTP的數(shù)據(jù)進(jìn)行加密。TLS是SSL的升級版?,F(xiàn)在提到HTTPS,加密套件基本指的是TLS。
傳輸加密的流程
原先是應(yīng)用層將數(shù)據(jù)直接給到TCP進(jìn)行傳輸,現(xiàn)在改成應(yīng)用層將數(shù)據(jù)給到TLS/SSL,將數(shù)據(jù)加密后,再給到TCP進(jìn)行傳輸。將數(shù)據(jù)加密后再傳輸,而不是任由數(shù)據(jù)在復(fù)雜而又充滿危險的網(wǎng)絡(luò)上明文裸奔,在很大程度上確保了數(shù)據(jù)的安全。這樣的話,即使數(shù)據(jù)被中間節(jié)點(diǎn)截獲,壞人也看不懂。
HTTPS是如何加密數(shù)據(jù)的
對安全或密碼學(xué)基礎(chǔ)有了解的同學(xué),應(yīng)該知道常見的加密手段。一般來說,加密分為對稱加密、非對稱加密(也叫公開密鑰加密)。
對稱加密
對稱加密的意思就是,加密數(shù)據(jù)用的密鑰,跟解密數(shù)據(jù)用的密鑰是一樣的。
對稱加密的優(yōu)點(diǎn)在于加密、解密效率通常比較高。缺點(diǎn)在于,數(shù)據(jù)發(fā)送方、數(shù)據(jù)接收方需要協(xié)商、共享同一把密鑰,并確保密鑰不泄露給其他人。此外,對于多個有數(shù)據(jù)交換需求的個體,兩兩之間需要分配并維護(hù)一把密鑰,這個帶來的成本基本是不可接受的。
非對稱加密
非對稱加密的意思就是,加密數(shù)據(jù)用的密鑰(公鑰),跟解密數(shù)據(jù)用的密鑰(私鑰)是不一樣的。
什么叫做公鑰呢?其實就是字面上的意思——公開的密鑰,誰都可以查到。因此非對稱加密也叫做公開密鑰加密。
相對應(yīng)的,私鑰就是非公開的密鑰,一般是由網(wǎng)站的管理員持有。
公鑰、私鑰兩個有什么聯(lián)系呢?
簡單的說就是,通過公鑰加密的數(shù)據(jù),只能通過私鑰解開。通過私鑰加密的數(shù)據(jù),只能通過公鑰解開。
很多同學(xué)都知道用私鑰能解開公鑰加密的數(shù)據(jù),但忽略了一點(diǎn),私鑰加密的數(shù)據(jù),同樣可以用公鑰解密出來。而這點(diǎn)對于理解HTTPS的整套加密、授權(quán)體系非常關(guān)鍵。
問題一:公鑰如何獲取
這里要涉及兩個非常重要的概念:證書、CA(證書頒發(fā)機(jī)構(gòu))。
證書
可以暫時把它理解為網(wǎng)站的身份證。這個身份證里包含了很多信息,其中就包含了上面提到的公鑰。
也就是說,當(dāng)小明、小王、小光等用戶訪問XX的時候,再也不用滿世界的找XX的公鑰了。當(dāng)他們訪問XX的時候,XX就會把證書發(fā)給瀏覽器,告訴他們說,乖,用這個里面的公鑰加密數(shù)據(jù)。
這里有個問題,所謂的“證書”是哪來的?這就是下面要提到的CA負(fù)責(zé)的活了。
CA(證書頒發(fā)機(jī)構(gòu))
強(qiáng)調(diào)兩點(diǎn):
可以頒發(fā)證書的CA有很多(國內(nèi)外都有)。
只有少數(shù)CA被認(rèn)為是權(quán)威、公正的,這些CA頒發(fā)的證書,瀏覽器才認(rèn)為是信得過的。比如VeriSign。(CA自己偽造證書的事情也不是沒發(fā)生過。。。)
證書頒發(fā)的細(xì)節(jié)這里先不展開,可以先簡單理解為,網(wǎng)站向CA提交了申請,CA審核通過后,將證書頒發(fā)給網(wǎng)站,用戶訪問網(wǎng)站的時候,網(wǎng)站將證書給到用戶。
至于證書的細(xì)節(jié),同樣在后面講到。
問題二:數(shù)據(jù)傳輸僅單向安全
上面提到,通過私鑰加密的數(shù)據(jù),可以用公鑰解密還原。那么,這是不是就意味著,網(wǎng)站傳給用戶的數(shù)據(jù)是不安全的?
答案是:是!!!(三個嘆號表示強(qiáng)調(diào)的三次方)
看到這里,可能你心里會有這樣想:用了HTTPS,數(shù)據(jù)還是裸奔,這么不靠譜,還不如直接用HTTP來的省事。
但是,為什么業(yè)界對網(wǎng)站HTTPS化的呼聲越來越高呢?這明顯跟我們的感性認(rèn)識相違背啊。
因為:HTTPS雖然用到了公開密鑰加密,但同時也結(jié)合了其他手段,如對稱加密,來確保授權(quán)、加密傳輸?shù)男?、安全性?/p>
概括來說,整個簡化的加密通信的流程就是:
小明訪問XX,XX將自己的證書給到小明(其實是給到瀏覽器,小明不會有感知)
瀏覽器從證書中拿到XX的公鑰A
瀏覽器生成一個只有自己自己的對稱密鑰B,用公鑰A加密,并傳給XX(其實是有協(xié)商的過程,這里為了便于理解先簡化)
XX通過私鑰解密,拿到對稱密鑰B
瀏覽器、XX 之后的數(shù)據(jù)通信,都用密鑰B進(jìn)行加密
注意:對于每個訪問XX的用戶,生成的對稱密鑰B理論上來說都是不一樣的。比如小明、小王、小光,可能生成的就是B1、B2、B3.