Proxy

沒有伺服器證書,代理如何解密 HTTPS 流量?

  • April 16, 2020

我正在從事一個涉及代理一些客戶端應用程序和伺服器之間的流量的項目。為此,我使用AnyProxy

我的項目需要解密 HTTPS。我可以使用 AnyProxy 來實現這一點,方法是讓它生成一個 rootCA,然後在客戶端機器上信任該 rootCA。

它有效,但從理論的角度來看,我不明白它是如何/為什麼起作用的。

據我所知,HTTPS 加密/解密是這樣工作的:

  1. 伺服器生成公鑰和私鑰。
  2. 伺服器根據密鑰生成證書。
  3. 它向 CA(證書頒發機構)註冊所述證書。這樣客戶端應用程序(例如 Web 瀏覽器)就可以驗證來自受信任來源的證書的真實性。
  4. 客戶端應用程序向伺服器發出 HTTPS 請求。
  5. 在握手期間,客戶端驗證證書(以及伺服器)的真實性並接收伺服器的公鑰。
  6. 客戶端使用伺服器的公鑰加密請求。
  7. 伺服器使用其私鑰解密請求。

隨著代理的出現,它需要伺服器的私鑰來解密客戶端的請求。它是如何得到的?有人可以解釋一下我錯過了什麼(或者,如果我完全錯了)?

這正是您需要在客戶端生成並安裝根 CA 的原因:它使您的代理能夠為每個域頒發假證書。代理不會解密客戶端之間的現有連接,而是建立兩個單獨的連接:它充當面向伺服器的客戶端和充當客戶端的伺服器。大致是這樣的:

HTTPS攔截時序圖

引用自:https://serverfault.com/questions/1012579