在我的設置中,我有2層透明代理。當一個客戶端發出一個SSL請求時,我希望它所遇到的第一個代理只需將流量轉發給另一個,而不用嘗試與客戶端握手。節點http代理SSL透明
該設置看起來很有趣,但在我的情況下是合理的 - 第二個代理只是偶爾註冊自己到第一個(通過其他服務)。它告訴第一個:「我感興趣的是一些類似於_ _ _」的流量。在大多數情況下,第一個代理人只是幹這個工作。
httpProxy(在節點代理中)代理SSL請求可以嗎?我必須使用httpsProxy(然後將與客戶端握手)?
在我的設置中,我有2層透明代理。當一個客戶端發出一個SSL請求時,我希望它所遇到的第一個代理只需將流量轉發給另一個,而不用嘗試與客戶端握手。節點http代理SSL透明
該設置看起來很有趣,但在我的情況下是合理的 - 第二個代理只是偶爾註冊自己到第一個(通過其他服務)。它告訴第一個:「我感興趣的是一些類似於_ _ _」的流量。在大多數情況下,第一個代理人只是幹這個工作。
httpProxy(在節點代理中)代理SSL請求可以嗎?我必須使用httpsProxy(然後將與客戶端握手)?
如果您願意,您可以使用現有的httpsProxy完成所有這些工作。除非你想要將一個非節點代理或代理服務器用於不同的服務器,否則我看不到有兩個服務器可以獲得什麼。
只需將所需的日誌/簽署邏輯添加到現有的httpsProxy。
通常,我在代理上使用https來限制開放端口的數量,並刪除在所有運行的節點服務器上執行https的必要性。您也可以使用http-basic庫添加基本身份驗證。
見我的例子代碼:https://github.com/TotallyInformation/node-proxy-https-example/blob/master/proxy.js
編輯2012-05-15:嗯,經過一番思考,我不知道如果你不應該看着像stunnel做你想要什麼,而不是節點?
(僅供參考,我已經在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服務器。但是,這不會透明,因爲它無法生成正確的證書。
謝謝 - 我沒有在這種情況下MITM後。然而,第二個代理將在轉發時充當MITM。否則,是的,我只是通過路由器進行中繼。 你提到的是我想實現的,但是我似乎無法使用節點代理來實現它。 – badunk 2012-05-11 03:25:48
你是一個MITM代理後(這可能看起來* *裏面的連接,提供了其客戶端配置爲信任它)或普通HTTPS代理的只是等同,只是透明? – Bruno 2012-05-11 00:59:00