文章目錄
- 對稱加密的非對稱加密
- http和https原理
- TCP三次握手四次揮手
- https通訊流程:
- Charles抓包原理
對稱加密的非對稱加密
對稱加密:發送方的接收方式使用同一個秘鑰進行加密和解密,發送方將需要發送的數據,選擇某種加密算法,加上秘鑰,加密之后傳輸給接收方,接收方接收到數據使用秘鑰和相同的加密算法進行解密,獲得數據信息。對稱加密的優點是加密速度快,但是,接收方和發送方擁有同樣的秘鑰,容易泄露,安全得不到保證,且秘鑰傳遞的過程中也容易泄露。
非對稱加密:發送方生成一對秘鑰,公鑰和私鑰,公鑰可以交給別人,用來加密,私鑰用來解密,自己保留,傳輸過程中即使公鑰和傳輸的數據別截獲了,沒有私鑰也解密不了。
http和https原理
http是什么:http是一種基于請求響應的應用層協議,設計的初衷是為了簡單高效的傳輸超文本數據,所以不涉及任何的數據加密,身份校驗和完整性驗證,安全性較差。
https是什么:https在http的基礎上使用對稱加密和非對稱加密保證的數據傳輸的安全性,在握手階段使用非對稱加密傳輸秘鑰,建立連接之后使用秘鑰進行對稱加密,保證數據的安全,https對數據進行加密,身份的校驗還有數據的額完整性,保證數據的安全。
TCP三次握手四次揮手
TCP三次握手:目的是為了在不可靠的網絡中建立可靠的連接,并協商初始序號
- 第一步,客戶端服務端發送SYN請求請求建立連接
- 第二步,SYN收到之后發送SYN+ACK報文,表明同意建立連接
- 第三步,客戶端收到消息之后發送ACK再次確認
- 之后就可以發送消息
為什么不能兩次握手,要三次握手?這個是為了防止失效的連接請求再次發送到了服務端,服務端同意連接之后,客戶端拒絕了,但是服務端認為建立了連接,等待消息的接收,造成資源浪費。
TCP四次揮手:目的是為了確保算法數據傳輸完畢,優雅釋放連接
- 第一步,客戶端發送fin表示不再發送數據,告訴服務端我數據傳輸結束
- 第二步,服務端接收到數據,發送ACK確認,表明收到服務端的請求,但是我可能還有一些數據需要發送給你,你還要接收
- 第三步,服務端發送完數據之后,發送fin報文,表明我的數據也發送完了,可以關閉了
- 第四步,客戶端回復ACK確認收到信息,關閉連接
為什么不能兩次揮手:由于客戶端請求關閉連接,自己沒有數據需要發送,但由于http是全雙工的兩邊都是可以發送數據,服務器的數據可能還沒有發送完成,這個時候客戶端還需要接收數據不能關閉連接
為什么不能三次揮手:三次揮手是可以的,不過得滿足特定條件,當客戶端發送關閉連接,這個時候服務端已經也沒有數據需要發送了,就可以進行關閉
第四步能不能不要了:不能,第四步是為了確保客戶端已經收到了服務端的fin信息,服務端收到之后才會關閉連接,如果沒有收到信息,服務端會進行超時重傳,再次發送fin給客戶端,在2msl時間里,客戶端收到信息之后回再次發送ACK
https通訊流程:
TCP三次握手
- 目的:建立可靠的數據傳輸
- 過程:
- 客戶端 → 發送SYN包 → 服務器
- 服務器 → 回復SYN+ACK包 → 客戶端
- 客戶端 → 發送ACK包 → 服務器
TLS握手
- 目的:保證數據的安全性,協商秘鑰和驗證服務器證書
- 過程:
- 客戶端發起握手,發送信息(支持的TSL版本,支持的加密套件,客戶端生成的隨機數)
- 服務器響應,發送信息(確定的TSL版本,選定的加密套件,服務器生成的隨機數,服務器的CA證書)
- 客戶端驗證服務器的證書
- 交換密鑰,客戶端生成預主密鑰,使用服務器的公鑰加密,發送到服務器,服務器解密獲取預主密鑰
- 生成會話密鑰,服務器和客戶端都使用兩個隨機數和這個預主密鑰生成會話密鑰
數據傳輸
- 目的:使用協商的對稱密鑰加密實際通信數據
- 過程:
- 客戶端和服務端使用秘鑰對數據加密之后再發送
TCP四次揮手
- 目的:安全關閉TCP連接,釋放資源
- 過程:
- 客戶端 → 發送FIN包 → 服務器。
- 服務器 → 回復ACK包 → 客戶端。
- 服務器 → 發送FIN包 → 客戶端。
- 客戶端 → 回復ACK包 → 服務器。
Charles抓包原理
作為一個代理服務器,攔截客戶端和服務器之間的通訊,做響應的處理之后再發送到對應的地址
- 客戶端向服務發送證書請求
- Charles攔截請求,偽裝客戶端向服務器發送請求
- 服務器返回CA證書
- Charles獲取證書的公鑰,自己制作證書,返回自己證書給客戶端
- 客戶端檢查證書,生成秘鑰,使用Charles公鑰加密,發送給服務器
- Charles攔截,使用自己的私鑰解密,使用服務端的公鑰加密,發送給服務器
- 服務器用自己的私鑰解密,想客戶端發送響應
- Charles攔截,自己給客戶端響應
- 連接建立