2012-04-10 62 views
4

在我的設置中,我有2層透明代理。當一個客戶端發出一個SSL請求時,我希望它所遇到的第一個代理只需將流量轉發給另一個,而不用嘗試與客戶端握手。節點http代理SSL透明

該設置看起來很有趣,但在我的情況下是合理的 - 第二個代理只是偶爾註冊自己到第一個(通過其他服務)。它告訴第一個:「我感興趣的是一些類似於_ _ _」的流量。在大多數情況下,第一個代理人只是幹這個工作。

httpProxy(在節點代理中)代理SSL請求可以嗎?我必須使用httpsProxy(然後將與客戶端握手)?

+1

你是一個MITM代理後(這可能看起來* *裏面的連接,提供了其客戶端配置爲信任它)或普通HTTPS代理的只是等同,只是透明? – Bruno 2012-05-11 00:59:00

回答

5

如果您願意,您可以使用現有的httpsProxy完成所有這些工作。除非你想要將一個非節點代理或代理服務器用於不同的服務器,否則我看不到有兩個服務器可以獲得什麼。

只需將所需的日誌/簽署邏輯添加到現有的httpsProxy。

通常,我在代理上使用https來限制開放端口的數量,並刪除在所有運行的節點服務器上執行https的必要性。您也可以使用http-basic庫添加基本身份驗證。

見我的例子代碼:https://github.com/TotallyInformation/node-proxy-https-example/blob/master/proxy.js

編輯2012-05-15:嗯,經過一番思考,我不知道如果你不應該看着像stunnel做你想要什麼,而不是節點?

+0

啊,讓我給一個嘗試 – badunk 2012-05-08 19:41:40

+0

對不起,我已經澄清我的問題。我想你可能理解錯了。我意識到我現有的httpsProxy可以做我之前提到過的 - 但那不是重點。 – badunk 2012-05-11 00:58:27

+0

在您的例子,它的客戶端,這就是通過HTTPS(然後可能到目標服務器也連接)代理服務器之間的連接,是不是?我可以看到這一點,但在透明的代理上下文中沒有意義。 – Bruno 2012-05-11 01:24:38

2

(僅供參考,我已經在my answer to your similar question on ServerFault取得了一定的這些點的。)

  • 如果你是一個MITM代理後(也就是一個代理,可以看看SSL裏面的內容通過使用它自己的證書,只要客戶端被配置爲信任它們就可以工作),它將不會完全透明,因爲您至少必須配置其客戶端來信任其證書。另外,除非您的所有客戶端都使用服務器名稱指示擴展名,否則代理服務器本身將無法可靠地確定要爲其頒發其證書的主機(正常HTTPS代理通過查看可以知道的東西由客戶發出的CONNECT請求)。

  • 如果一個MITM代理後是,那你還不如讓經由路由器的初始連接。如果您想記錄該流量,則您的路由器可能能夠記錄加密的數據包。

    讓您的路由器捕獲SSL/TLS數據包以透明地將它們發送給代理,該代理最終只會將該數據流中繼到目標服務器,這並沒有多大意義。 (從本質上講,透明代理意味着客戶端沒有配置知道它,所以它甚至不會發送它的方法,你可能已經獲得了請求的主機和端口。在這裏,你真的沒有任何東西超過什麼路由器可以做)

    編輯:再次,你根本不會能夠使用HTTP代理連接的內容透明分析。即使使用普通代理,HTTPS連接也會直接傳遞到目標服務器。SSL/TLS連接本身是在原始客戶端和目標服務器之間建立的。使用SSL/TLS的目的是爲了保護這種連接,並且在客戶想要查看連接內容時通知客戶端。

    純HTTP透明代理服務器工作,因爲(a)可以看到流量(特別是,請求行和HTTP頭是可見的,以便代理可以知道自己創建哪個請求)和(b)流量可以透明地更改,以便初始客戶端不會注意到請求不是直接的,並且可以像以前一樣工作。

    這些條件都不符合HTTPS真。經過HTTP代理的HTTPS連接只是隧道,在客戶端發出明確的請求之後,它發送了一條CONNECT命令並被配置爲使用這樣的代理。

    做一些接近你以後,你需要接受的SSL/TLS連接並且解密了問題(可能像安全通道)HTTP代理之前,在SSL/TLS服務器。但是,這不會透明,因爲它無法生成正確的證書。

+0

謝謝 - 我沒有在這種情況下MITM後。然而,第二個代理將在轉發時充當MITM。否則,是的,我只是通過路由器進行中繼。 你提到的是我想實現的,但是我似乎無法使用節點代理來實現它。 – badunk 2012-05-11 03:25:48