在使用以下内容启动fiddler后,使用FiddlerCore修改https流量时遇到问题。我传入端口,上游代理和bypassAddress(如果设置)。 我尝试通过调用CertMaker.GetRootCertificate()传递“*”和“127.0.0.1”甚至证书,并在FiddlerApplication.CreateProxyEndpoint中传入证书,结果不为空,但我的https流量没有记录。
internal static void StartProxyWithSecureEndPoint(int proxyPort, string upstreamProxy, string bypassAddress)
{
ProxyPort = proxyPort;
UpstreamProxy = upstreamProxy;
BypassAddress = bypassAddress;
_upstreamProxy = upstreamProxy;
URLMonInterop.SetProxyInProcess("127.0.0.1:" + proxyPort, bypassAddress);
CONFIG.IgnoreServerCertErrors = true;
CONFIG.bCaptureCONNECT = false;
if (_upstreamProxy == null)
{
_fiddlerOptions = (FiddlerCoreStartupFlags.Default & ~FiddlerCoreStartupFlags.RegisterAsSystemProxy & ~FiddlerCoreStartupFlags.CaptureFTP & ~FiddlerCoreStartupFlags.ChainToUpstreamGateway);
}
else
{
_fiddlerOptions = (FiddlerCoreStartupFlags.Default & ~FiddlerCoreStartupFlags.RegisterAsSystemProxy & ~FiddlerCoreStartupFlags.CaptureFTP);
}
FiddlerApplication.BeforeRequest += FiddlerApplication_BeforeRequest;
FiddlerApplication.BeforeResponse += FiddlerApplication_BeforeResponse;
FiddlerApplication.ResponseHeadersAvailable += FiddlerApplication_ResponseHeadersAvailable;
FiddlerApplication.OnValidateServerCertificate += FiddlerApplication_OnValidateServerCertificate;
FiddlerApplication.Startup(proxyPort, _fiddlerOptions);
_secureEndpoint = FiddlerApplication.CreateProxyEndpoint(proxyPort, false, "*");
}
答案 0 :(得分:0)
"*"
时,CreateProxyEndpoint
不是证书主机名的有效值。CreateProxyEndpoint
并传递证书主机名时,您创建的侦听器的行为与代理不同,它的行为类似于HTTPS服务器。因此,如果您使用SetProxyInProcess
强制流程中的WinINET调用者向该端点发送流量,则请求将全部失败,因为客户端会向期望HTTPS ClientHello的内容发送CONNECT
。 bCaptureCONNECT
设置为false
时,会阻止客户端尝试代理其安全流量。根据您尝试做的文字描述,您根本不应该致电CreateProxyEndpoint
,也不应该设置bCaptureCONNECT
。而且要确认一下,因为您没有设置RegisterAsSystemProxy
,所以只从您自己的流程中捕获来自WinINET调用者(例如WebBrowserControl)的流量。
您是否看过FiddlerCore下载附带的Program.cs演示?