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