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