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