HTTPS(Hypertext Transfer Protocol Secure)是一種透過 TLS/SSL 加密保護資料傳輸的通訊協議,用於在網際網路上安全地傳輸資訊。它確保了使用者與網站之間的通信是加密的,防止敏感資訊被攔截或竊取,同時提供身份驗證,確保用戶正與目標網站進行通信,從而保護用戶的隱私和資訊安全。
而市面上很多抓包工具,如:Charles Web Debugger Proxy、Cloudflare Gateway、Stream,只要安裝 RootCA 後就可以解開 HTTPS 封包,查看封包的 header 與 body,這是怎麼回事?是否代表 HTTPS 不安全,有機會被攔截或竊取?
HTTPS 握手
當用戶端發送 HTTPS 請求時,它會與伺服器進行 SSL/TLS 握手,這是一個初始化安全連接的過程。握手過程如下:
- 用戶端 Hello:用戶端向伺服器發送一個 Client Hello 訊息,其中包含有關其支援的 SSL/TLS 版本和加密演算法的資訊。
- 伺服器 Hello:伺服器回應 Client Hello 訊息,並向客戶端發送一個Server Hello 消息,其中包含所選擇的 SSL/TLS 版本和加密演算法,以及伺服器的憑證。
- 驗證憑證:用戶端驗證伺服器的憑證是否有效。這包括檢查憑證的有效性,以及確定它是否由可信的憑證授權機構(CA)簽署。
- 金鑰交換:如果憑證驗證成功,用戶端將使用憑證中的公鑰來加密一個對稱金鑰,並將其發送給伺服器。
- 完成握手:伺服器使用其私鑰解密用戶端發送的對稱金鑰。現在,客戶端和伺服器都擁有了相同的對稱金鑰,並且可以使用它來加密和解密後續的通訊。
完成握手後,用戶端和伺服器之間的資料傳輸將使用對稱金鑰進行加密和解密,從而確保通訊的保密性和完整性。
抓包原理
簡單來說就是,用戶端用公鑰加密,伺服器端用私鑰解密。如果要能夠解開 HTTPS 封包,一定要先有私鑰才能解密。
通常這些抓包軟體需要先在本地安裝 RootCA,然後透過本地或雲端的 VPN / Proxy 連線,讓網路流量經過程式,該程式會把所有 HTTPS 的憑證都換成自己的憑證與私鑰,就可以解開封包內容。若本地未安裝 RootCA,瀏覽器會因為認不得憑證,而在瀏覽器判斷不安全。
根憑證原理
安裝根憑證(Root CA)可以解開 HTTPS 封包,是因為根憑證是整個數位憑證驗證體系的頂級信任機構。在 HTTPS 通訊中,伺服器會向客戶端發送一份數位憑證,其中包含了伺服器的公鑰以及一些其他資訊,用於驗證伺服器的身份和確保通訊的安全性。而數位憑證本身是由一系列數位簽名構成的。
數位簽名是由憑證頒發機構(CA)用其私鑰對憑證中的資訊進行加密得到的。要驗證數位憑證的有效性,客戶端需要使用相應的 CA 的公鑰對數位簽名進行解密,並驗證簽名的有效性,以確保憑證的真實性和完整性。
如果客戶端信任了根憑證,那麼它就會信任由這個根憑證簽發的所有子憑證,因為數位憑證的信任鏈是依賴於根憑證的信任的。這意味著,如果伺服器的數位憑證可以通過根憑證驗證,那麼客戶端就可以相信伺服器的身份,從而安全地建立 HTTPS 連接,解密和處理伺服器發送的資料。
因此,安裝根憑證可以解開 HTTPS 封包,是因為它為客戶端提供了信任的根基,使客戶端能夠驗證伺服器發送的數位憑證的有效性,並安全地與伺服器建立加密通訊。