[英]Running Fiddler as a Reverse Proxy for HTTPS server
我有以下情況:2台主機,一台是客戶端,另一台是HTTPS服務器。
Client (:<brwsr-port>) <=============> Web server (:443)
我在服務器上安裝了Fiddler ,這樣我就可以在我的服務器端口8888上運行Fiddler了。
我想達到的情況如下:
|Client (:<brwsr-port>)| <===> |Fiddler (:8888) <===> Web server (:443)|
|-Me-------------------| |-Server--------------------------------|
從我的電腦我想聯系Fiddler,它將流量重定向到Web服務器。 然而,Web服務器使用HTTPS。
在服務器上,我設置了Fiddler來處理HTTPS會話並解密它們。 我被要求在服務器上安裝Fiddler的假CA證書,我做到了! 我還插入了Fiddler維基頁面建議的腳本來重定向HTTPS流量
// HTTPS redirect -----------------------
FiddlerObject.log("Connect received...");
if (oSession.HTTPMethodIs("CONNECT") && (oSession.PathAndQuery == "<server-addr>:8888")) {
oSession.PathAndQuery = "<server-addr>:443";
}
// --------------------------------------
但是,當我嘗試https://myserver:8888/index.html
我失敗了!
在客戶端上使用Fiddler時,我可以看到CONNECT請求啟動但會話失敗,因為響應是HTTP錯誤502.看起來沒有人在端口8888上偵聽。事實上,如果我在服務器上停止Fiddler,我會得到相同的情況:502壞網關。
請注意,當我嘗試https://myserver/index.html
和https://myserver:443/index.html
一切正常!
我究竟做錯了什么?
我認為,因為TLS / SSL可能在端口443上運行,我應該讓Fiddler在那里監聽並將我的Web服務器移動到另一個端口,例如444(我應該在IIS上設置一個https綁定在444端口)。 這是正確的嗎?
如果未將Fiddler配置為客戶端的代理,而是在服務器上作為反向代理運行,則事情會變得復雜一些。
Allow Remote Clients to Connect
。 重啟Fiddler。 !listen 443 ServerName
其中ServerName是服務器的主機名; 例如,對於https://Fuzzle/
您將使用fuzzle
作為服務器名稱。 在OnBeforeRequest方法中,添加:
if ((oSession.HostnameIs("fuzzle")) && (oSession.oRequest.pipeClient.LocalPort == 443) ) { oSession.host = "fuzzle:444"; }
你為什么需要這樣做?
!listen
命令指示Fiddler創建一個新端點,該端點將在連接時與客戶端執行HTTPS握手; 默認代理端點不這樣做,因為當代理收到HTTPS流量的連接時,它會獲得HTTP CONNECT
請求而不是握手。
我剛遇到類似的情況,我有VS2013(IISExpress)在HTTPS(端口44300)上運行Web應用程序,我想從移動設備瀏覽應用程序。
我將Fiddler配置為“充當反向代理”並“允許遠程客戶端連接”但它只能在端口80(HTTP)上工作。
根據EricLaw的建議,我將監聽端口從8888更改為8889並運行命令“ !listen 8889 [host_machine_name]
”和bingo我能夠在端口8889上通過HTTPS瀏覽我的應用程序。
注意:我之前已將轉發端口號輸入注冊表( 如此處所述 ),因此Fiddler已經知道要將請求轉發到哪個端口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.