面試官:請(qǐng)說(shuō)一下,HTTPS的加密過(guò)程是怎樣的?
由于HTTP使用明文傳輸數(shù)據(jù),存在一些潛在的安全威脅和漏洞,比如傳輸信息被竊聽(tīng)、篡改和劫持。
為了彌補(bǔ)這些漏洞,人們提出了HTTPS來(lái)保證HTTP通信的安全性。HTTPS采用SSL/TLS協(xié)議對(duì)HTTP通信進(jìn)行加密,并通過(guò)數(shù)字證書(shū)驗(yàn)證來(lái)保證通信雙方的身份以及數(shù)據(jù)的完整性和保密性。
HTTPS的傳輸過(guò)程,首先是完成TCP三次握手,接著進(jìn)行SSL/TLS四次握手,最后基于SSL/TLS協(xié)商的秘鑰,將HTTP協(xié)議的數(shù)據(jù)通過(guò)秘鑰加密進(jìn)行傳輸。HTTPS的加密過(guò)程主要指的就是SSL/TLS四次握手過(guò)程。
SSL/TLS的四次握手過(guò)程是:
1 客戶(hù)端向服務(wù)器發(fā)起ClientHello消息,請(qǐng)求建立TLS連接,并向服務(wù)端發(fā)送支持的TLS協(xié)議版本、一個(gè)隨機(jī)數(shù)和支持的加密方法列表,比如RSA公鑰加密,
2 服務(wù)器收到客戶(hù)端請(qǐng)求后,回應(yīng)SeverHello消息,消息中包含確認(rèn)使用的TLS協(xié)議版本、一個(gè)隨機(jī)數(shù)、加密方法以及服務(wù)器的數(shù)字證書(shū)。
數(shù)字證書(shū)是由專(zhuān)業(yè)的證書(shū)服務(wù)機(jī)構(gòu)CA頒發(fā),證書(shū)中包含服務(wù)器的公鑰,CA機(jī)構(gòu)使用自己的私鑰將服務(wù)器公鑰進(jìn)行加密。
3 客戶(hù)端收到服務(wù)器回應(yīng)以后,首先驗(yàn)證服務(wù)器證書(shū),如果證書(shū)受信任,或者是用戶(hù)接受了不受信的證書(shū),瀏覽器會(huì)生成一串新的隨機(jī)數(shù),并用證書(shū)中提供的公鑰加密,發(fā)送給服務(wù)器。此時(shí),客戶(hù)端會(huì)根據(jù)前面的三個(gè)隨機(jī)數(shù),通過(guò)一定的算法來(lái)生成“會(huì)話(huà)密鑰”,這個(gè)會(huì)話(huà)密鑰就是接下來(lái)雙方進(jìn)行對(duì)稱(chēng)加密使用的密鑰。同時(shí),客戶(hù)端還會(huì)發(fā)送握手結(jié)束通知,通知消息中會(huì)把之前所有內(nèi)容的數(shù)據(jù)做個(gè)摘要,用來(lái)供服務(wù)端校驗(yàn)。
4 服務(wù)端收到客戶(hù)端的回復(fù)后,通過(guò)協(xié)商的加密算法將客戶(hù)端的第三個(gè)隨機(jī)數(shù)解密出來(lái),然后使用跟客戶(hù)端同樣的算法,根據(jù)前面的三個(gè)隨機(jī)數(shù)計(jì)算出 “會(huì)話(huà)密鑰”。同時(shí),服務(wù)端也會(huì)發(fā)送握手結(jié)束通知,通知消息中會(huì)把之前所有內(nèi)容的數(shù)據(jù)做個(gè)摘要,用來(lái)供客戶(hù)端校驗(yàn)。
至此,整個(gè)握手階段全部結(jié)束。接下來(lái),客戶(hù)端與服務(wù)器進(jìn)入加密通信,就完全是使用普通的 HTTP 協(xié)議,只不過(guò)用 “會(huì)話(huà)密鑰” 加密內(nèi)容,這時(shí)候是對(duì)稱(chēng)加密的,因?yàn)榭蛻?hù)端和服務(wù)器使用的是相同的秘鑰。
整體上看,SSL/TLS 在工作流程中通過(guò)如下四個(gè)方面保證安全性:
1 通過(guò) CA 證書(shū)體系交換服務(wù)器的公鑰來(lái)驗(yàn)證服務(wù)器的合法性
2 通過(guò)數(shù)字簽名,確保數(shù)據(jù)的完整性,防止數(shù)據(jù)被篡改
3 通過(guò)非對(duì)稱(chēng)加密算法,交換用于對(duì)稱(chēng)加密的密鑰,保證會(huì)話(huà)秘鑰的安全傳輸
4 通過(guò)對(duì)稱(chēng)加密算法,加密HTTP的數(shù)據(jù)進(jìn)行正常的網(wǎng)絡(luò)通信