圖片來源:HTTPS 詳解一:附帶最精美詳盡的 HTTPS 原理圖 - 個人文章 - SegmentFault 思否
加密流程按圖中的序號分為:
-
客戶端請求 HTTPS 網址,然后連接到 server 的 443 端口 (HTTPS 默認端口,類似于 HTTP 的80端口)。
-
采用 HTTPS 協議的服務器必須要有一套數字 CA (Certification Authority)證書。頒發證書的同時會產生一個私鑰和公鑰。私鑰由服務端自己保存,不可泄漏。公鑰則是附帶在證書的信息中,可以公開的。證書本身也附帶一個證書電子簽名,這個簽名用來驗證證書的完整性和真實性,可以防止證書被篡改。
-
服務器響應客戶端請求,將證書傳遞給客戶端,證書包含公鑰和大量其他信息,比如證書頒發機構信息,公司信息和證書有效期等。
-
客戶端解析證書并對其進行驗證。如果證書不是可信機構頒布,或者證書中的域名與實際域名不一致,或者證書已經過期,就會向訪問者顯示一個警告,由其選擇是否還要繼續通信。
如果證書沒有問題,客戶端就會從服務器證書中取出服務器的公鑰A。然后客戶端還會生成一個隨機碼 KEY,并使用公鑰A將其加密。
-
客戶端把加密后的隨機碼 KEY 發送給服務器,作為后面對稱加密的密鑰。
-
服務器在收到隨機碼 KEY 之后會使用私鑰B將其解密。經過以上這些步驟,客戶端和服務器終于建立了安全連接,完美解決了對稱加密的密鑰泄露問題,接下來就可以用對稱加密愉快地進行通信了。
-
服務器使用密鑰 (隨機碼 KEY)對數據進行對稱加密并發送給客戶端,客戶端使用相同的密鑰 (隨機碼 KEY)解密數據。
-
雙方使用對稱加密愉快地傳輸所有數據。