上一篇寫了關於 HTTP 相關的知識,還沒看的最好先去看下 計算機網絡學習之 http 相關。css
其實 HTTPS 協議只是在 HTTP 的應用層中,多加了個 SSL/TLS 協議,對比圖以下:算法
也就是說 HTTPS = HTTP + SSL/TLS安全
這裏先有個大體的瞭解就行,接下來具體看下 HTTPS:服務器
HTTP 協議是不加密的,數據在傳輸中是明文的,存在被消息被篡改、被監聽、被僞造的可能,也就形成了潛在的安全隱患。網絡
爲了保證互聯網數據傳輸中的安全性,因此在 HTTP 協議中加入了一層 SSL/TLS 協議,就是如今咱們說的 HTTPS ,HTTPS 可以使數據在傳輸的過程當中是加密的,保證數據安全。dom
SSL協議(Secure Sockets Layer)翻譯就是 安全套接字層,TLS(Transport Layer Security )是在 SSL 演變過程當中的生成的,也就是 TLS 是 SSL 的新版本。學習
客戶端和服務端在交互的過程當中,都要經過 TLS 層進行加密和解密,從而保證了數據的安全傳輸和完整傳輸。加密
SSL/TLS 也會進行握手操做,成爲 SSL 握手。SSl 握手是在 HTTP 三次握手之後進行的,因此 SSl 握手過程是不安全的,因此在這種狀況下就須要藉助數字證書來保證 SSL 握手的正確性,可是要注意的是,SSL/TLS 協議不只僅適用於 HTTP協議,是能夠用於任何應用層的協議的。.net
數字證書簡稱爲 CA,是由權威機構發佈的,也就是講數字證書是能夠被咱們所信賴的,若是要使用 HTTPS 的話,就須要去證書機構申請證書,大體流程以下:計算機網絡
第一次客戶端經過 Client Hello 消息把隨機數(稱爲 Random1)、Session ID 支持的加密算法發送給服務器
服務器肯定好定本次通訊採用的SSL版本和加密算法,若是服務器容許客戶端在之後的通訊中重用本次會話,則服務器會爲本次會話分配會話ID,生成服務器的隨機數 (稱爲 Random2)最終都經過 Server Hello 發送給客戶端
這步的主要做用就是吧把證書等信息發送給客戶端。
Client Key Exchange 是在校驗經過之後,客戶端又生成一個隨機數(Random 3),利用證書中的公鑰對其進行加密,告訴服務端。
這個時候客戶端已經有Random一、Random二、Random3三個隨機數。
Change Cipher Spec 客戶端發送消息,通知服務器後續報文將採用協商好的密鑰和加密套件進行通訊 。
Encrypted Handshake Message 客戶端計算已交互的握手消息(除Change Cipher Spec消息外全部已交互的消息)的 Hash 值,利用協商好的密鑰和加密算法處理 Hash 值(計算並添加MAC值、加密等),並經過 Encrypted Handshake Message 消息發送給 服務器。服務器利用一樣的方法計算已交互的握手消息的Hash值,並與 Encrypted Handshake Message 消息的解密結果比較,若是兩者相同,且MAC值驗證成功,則證實密鑰和加密套件協商成功。
這樣服務端也有Random一、Random二、Random3三個隨機數。 這個時候客戶端和服務端都有Random一、Random二、Random3三個隨機數,而後服務器發送Change Cipher Spec消息,通知客戶端後續報文將採用協商好的密鑰和加密套件進行通訊。
Encrypted Handshake Message 服務器計算已交互的握手消息的Hash值,利用協商好的密鑰和加密套件處理Hash值(計算並添加MAC值、加密等),並經過 Encrypted Handshake Message 消息發送給客戶端。客戶端利用一樣的方法計算已交互的握手消息的Hash值,並與Encrypted Handshake Message消息的解密結果比較,若是兩者相同,且MAC值驗證成功,則證實密鑰和加密套件協商成功。
經過上面的步驟,客戶端和服務端都使用 Random一、Random二、Random3三個隨機數 根據商定好的規則,生成對稱祕鑰(master secret),各自保存在本地,用該祕鑰加密接下來的數據。
前面完成了 SSL 握手操做,這裏就能夠利用剛纔協商好的祕鑰進行數據的加密傳輸。
HTTP 相關的知識就先了解這麼多,先大致知道是個什麼樣的流程,後面有空再深刻的研究吧。
歡迎關注個人公衆號: