關(guān)于HTTPS的加密流程詳解
HTTPS加密
HTTPS的混合加密
我們知道加密方式有三種
- 對稱加密
- 非對稱加密
- 混合加密
HTTPS采用的就是對稱加密和非對稱加密的混合加密方法。
- 混合加密解決了信息的機密性,防止數(shù)據(jù)被竊聽
- 摘要算法實現(xiàn)了數(shù)據(jù)的完成性,防止了數(shù)據(jù)被篡改
- 數(shù)字證書提供了身份驗證,防止了被冒充風險
在通信建立前采用非對稱加密的方式交換「會話秘鑰」,后續(xù)就不再使用非對稱加密。
在通信過程中全部使用對稱加密的「會話秘鑰」的方式加密明文數(shù)據(jù)。
采用「混合加密」的方式的原因:
- 對稱加密只使用一個密鑰,運算速度快,密鑰必須保密,無法做到安全的密鑰交換。
- 非對稱加密使用兩個密鑰:公鑰和私鑰,公鑰可以任意分發(fā)而私鑰保密,解決了密鑰交換問題但速度慢。
HTTPS 是如何建立連接的?
SSL/TLS 協(xié)議基本流程:
- 客戶端向服務(wù)器索要并驗證服務(wù)器的公鑰。
- 雙方協(xié)商生產(chǎn)「會話秘鑰」。
- 雙方采用「會話秘鑰」進行加密通信。
前兩步也就是 SSL/TLS 的建立過程,也就是握手階段。
SSL/TLS 的「握手階段」涉及四次通信,可見下圖:

SSL/TLS 協(xié)議建立的詳細流程:
1. ClientHello
首先,由客戶端向服務(wù)器發(fā)起加密通信請求,也就是 ClientHello 請求。
在這一步,客戶端主要向服務(wù)器發(fā)送以下信息:
(1)客戶端支持的 SSL/TLS 協(xié)議版本,如 TLS 1.2 版本。
(2)客戶端生產(chǎn)的隨機數(shù)(Client Random),后面用于生產(chǎn)「會話秘鑰」。
(3)客戶端支持的密碼套件列表,如 RSA 加密算法。
2. SeverHello
服務(wù)器收到客戶端請求后,向客戶端發(fā)出響應(yīng),也就是 SeverHello。服務(wù)器回應(yīng)的內(nèi)容有如下內(nèi)容:
(1)確認 SSL/ TLS 協(xié)議版本,如果瀏覽器不支持,則關(guān)閉加密通信。
(2)服務(wù)器生產(chǎn)的隨機數(shù)(Server Random),后面用于生產(chǎn)「會話秘鑰」。
(3)確認的密碼套件列表,如 RSA 加密算法。
(4)服務(wù)器的數(shù)字證書。
3.客戶端回應(yīng)
客戶端收到服務(wù)器的回應(yīng)之后,首先通過瀏覽器或者操作系統(tǒng)中的 CA 公鑰,確認服務(wù)器的數(shù)字證書的真實性。
如果證書沒有問題,客戶端會從數(shù)字證書中取出服務(wù)器的公鑰,然后使用它加密報文,向服務(wù)器發(fā)送如下信息:
(1)一個隨機數(shù)(pre-master key)。該隨機數(shù)會被服務(wù)器公鑰加密。
(2)加密通信算法改變通知,表示隨后的信息都將用「會話秘鑰」加密通信。
(3)客戶端握手結(jié)束通知,表示客戶端的握手階段已經(jīng)結(jié)束。這一項同時把之前所有內(nèi)容的發(fā)生的數(shù)據(jù)做個摘要,用來供服務(wù)端校驗。
上面第一項的隨機數(shù)是整個握手階段的第三個隨機數(shù),這樣服務(wù)器和客戶端就同時有三個隨機數(shù),接著就用雙方協(xié)商的加密算法,各自生成本次通信的「會話秘鑰」。
4. 服務(wù)器的最后回應(yīng)
服務(wù)器收到客戶端的第三個隨機數(shù)(pre-master key)之后,通過協(xié)商的加密算法,計算出本次通信的「會話秘鑰」。然后,向客戶端發(fā)生最后的信息:
(1)加密通信算法改變通知,表示隨后的信息都將用「會話秘鑰」加密通信。
(2)服務(wù)器握手結(jié)束通知,表示服務(wù)器的握手階段已經(jīng)結(jié)束。這一項同時把之前所有內(nèi)容的發(fā)生的數(shù)據(jù)做個摘要,用來供客戶端校驗。
至此,整個 SSL/TLS 的握手階段全部結(jié)束。接下來,客戶端與服務(wù)器進入加密通信,就完全是使用普通的 HTTP 協(xié)議,只不過用「會話秘鑰」加密內(nèi)容。
到此這篇關(guān)于關(guān)于HTTPS的加密流程詳解的文章就介紹到這了,更多相關(guān)HTTPS的加密流程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Visual Studio使用Git忽略不想上傳到遠程倉庫的文件
這篇文章主要介紹了Visual Studio使用Git忽略不想上傳到遠程倉庫的文件,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11
vscode eslint插件報錯Parsing error: Invalid
這篇文章主要介紹了vscode eslint插件報錯Parsing error: Invalid ecmaVersion問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10

