01 引言
成哥在Wireshark系列實戰案例中,分析過多種網絡問題,但唯獨沒有涉及到應用層HTTPS協議的相關內容。
今天通過wireshark捕獲HTTPS數據包,來給大家講解一下HTTPS的加解密過程。
我們先從HTTP協議說起。
02 HTTP協議
HTTP協議(超文本傳輸協議)是一種客戶端與Web服務器之間進行應用層通信的協議,主要用于WWW服務。
客戶端和web服務器端的之間通信為明文傳輸,數據直接交互,不存在任何安全性。如下圖所示:

通過捕獲HTTP的數據包,可以看到HTTP會話中的Cookie和各種id信息。如下圖所示:

HTTP雖然優點眾多,但是其明文傳輸的缺點,就足以致命。從2017年開始,Chrome 瀏覽器已把采用 HTTP 協議的網站標記為不安全網站,后續基本所有瀏覽器廠商都做了相同的標記。
HTTP協議的不安全問題,催生了HTTPS協議的產生。
03 HTTPS協議
為了增強HTTP協議的安全性,網景公司設計出了能夠對HTTP協議進行安全加密的傳輸方法,即在TCP/IP協議的傳輸層和應用層之間新增了一層安全套接層。并將SSL和HTTP協議相結合,以實現安全的HTTP數據傳輸。這就是HTTPS協議,即"HTTP over SSL"或者"HTTP Secure"。
早期SSL是HTTPS使用的標準協議,之后IETF在SSL 3.0的基礎之SSL進行標準化。形成傳輸層安全,即TLS。但它們本質上是相同的,我們可以合稱TLS/SSL。
HTTP和HTTPS的區別如下圖所示:

從圖中可以看出,HTTP協議和HTTPS協議主要的差別就是是否存在TLS/SSL層。即HTTPS協議= HTTP協議+SSL/TLS協議,在HTTPS數據傳輸的過程中,需要用SSL/TLS對數據進行加密和解密,然后使用HTTP對加密后的數據進行傳輸。
04 密鑰算法
在介紹HTTPS協議的加解密過程前,先要學一些密碼學的知識。
(1)幾個基本概念
明文:指的是未經過加密的原始數據。
密文:通過對明文進行加密操作后得到的數據。
密鑰:一種參數,通過在加解密算法中使用該參數,可對明文進行加密,或者對密文進行解密。同時,密鑰分為對稱密鑰與非對稱密鑰兩種,分別應用在對稱密鑰算法和非對稱密鑰算上。
(2)對稱密鑰算法
使用相同密鑰和算法進行加解密運算的算法叫做對稱密鑰算法。示意圖如下所示:

對稱加密的特點是算法公開、加密和解密速度快,適合于對大數據量進行加密。
常見的對稱加密算法有DES、3DES、TDEA、Blowfish、RC5和IDEA。
(3)非對稱密鑰算法
非對稱密鑰算法對比對稱密鑰算法,其安全性更好。
使用對稱密鑰算法通信的雙方使用的是相同的密鑰,如果一方的密鑰遭泄露,那么整個通信就會被破解。而非對稱密鑰算法的雙方兩個不同的密鑰,即公鑰和私鑰,且二者成對出現。示意圖如下:

私鑰被自己保存,不能對外泄露。公鑰指的是公共的密鑰,任何人都可以獲得該密鑰。用公鑰或私鑰中的任何一個進行加密,用另一個進行解密。
非對稱密鑰算法的主流協議是RSA,需要給每個參與者產生一對密鑰。共享私鑰到服務器,嚴格保障私鑰的安全性。
(4)SSL加解密解決方案
SSL加解密過程中同時使用到對稱密鑰和非對稱密鑰。如下圖所示。
加密過程:重要文件使用對稱密鑰加密(速度快,長度不增加),形成加密文件。然后使用接收方的公鑰將對稱密鑰加密,保證對稱密鑰傳輸時的安全性。然后將加密文件和加密的對稱密鑰發送給接收方。
解密過程:接收方通過私鑰將對稱密鑰解密,獲得對稱密鑰,然后對加密文件進行解密,獲取重要文件。
05 HTTPS協議加解密過程
成哥前文說,HTTPS協議= HTTP協議+SSL/TLS協議。HTTP協議傳輸過程較為簡單,這里不做介紹。我們來看看SSL/TLS協議的加解密過程。
在瀏覽器訪問騰訊網,通過wireshark軟件捕獲到的SSL/TLS數據包如下,可以看到完整的SSL/TLS加密通信過程,如下圖所示:

對捕獲到的報文進行整理,形成以下流程圖:

(1)客戶端首先向目標網站發送HTTPS請求,即Client Hello。
該數據包中給出了瀏覽器的TLS版本號、隨機數、支持的加密算法等信息。如下圖所示:

(2)服務器端進行應答,即Server Hello。
該數據包中給出了服務器使用的TLS版本、隨機數、確認雙方加密方法等信息。如下圖所示:

(3)服務器端給出數字證書和公鑰,即Certificate、Server Key Exchange
該數據包中給出了數字證書以及服務器公鑰,如下圖所示:

這里要特別說一下客戶端到底 如何來校驗對方發過來的數字證書是否有效的?
我們從抓包中看到,服務器端將服務器證書、中級證書、CA證書等一并發送客戶端。如下圖所示:

(4)客戶端根據客戶端的公鑰,計算出另一個公鑰,發送回服務器端,即Client Key Exchange、Change Cipher Spec、Encrypted Handshake Message。
證書校驗成功之后,客戶端會生成一個隨機串然后使用服務器證書的公鑰進行加密之后發送給服務器。

(5)服務器開啟New Session Ticket.
服務器通過使用自己的私鑰解密得到這個隨機值。開始使用這個隨機值進行對稱加密開始和客戶端進行通信。如下圖所示:

06 總結
成哥今天主要給大家講解了HTTPS協議的處理過程,重點是介紹HTTPS和wireshark捕獲數據包,所以這里沒對密碼學的知識做過多的介紹。之后有機會給大家補上。