Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpWebRequest与使用SSL的Fiddler_C#_Ssl_Httpwebrequest_Fiddler - Fatal编程技术网

C# HttpWebRequest与使用SSL的Fiddler

C# HttpWebRequest与使用SSL的Fiddler,c#,ssl,httpwebrequest,fiddler,C#,Ssl,Httpwebrequest,Fiddler,我有一个web应用程序使用HttpWebRequest向第三方服务发送一些数据。当我通过web代码运行它时,它是失败的,但是当我使用Fiddler的composer发送几乎完全相同的数据时,它就工作了 我这么说是因为数据包含一个密码摘要、nonce和timestamp,每个消息都会更改。我已经设置了一个断点,并将web应用程序即将发送的数据粘贴到Fiddler中,它就工作了 我已经将代码设置为通过Fiddler的代理运行,这很好-我可以看到发送的原始数据-它仍然失败,但它使我能够检查头是否完全相

我有一个web应用程序使用HttpWebRequest向第三方服务发送一些数据。当我通过web代码运行它时,它是失败的,但是当我使用Fiddler的composer发送几乎完全相同的数据时,它就工作了

我这么说是因为数据包含一个密码摘要、nonce和timestamp,每个消息都会更改。我已经设置了一个断点,并将web应用程序即将发送的数据粘贴到Fiddler中,它就工作了

我已经将代码设置为通过Fiddler的代理运行,这很好-我可以看到发送的原始数据-它仍然失败,但它使我能够检查头是否完全相同,并将它们弄乱一点,但没有发现任何有用的东西

    WebProxy myproxy = new WebProxy("127.0.0.1:8889", false);
    req.Proxy = myproxy;
我已经禁用了Fiddler在固定内容长度标题上留下的自动验证和跟随重定向选项,以防其中一个选项导致Fiddler表现得很聪明

这篇文章是一个https URL,所以我不得不添加以下几行来忽略解密https流量时Fiddler的证书问题

    ServicePointManager
        .ServerCertificateValidationCallback +=
        (sender, cert, chain, sslPolicyErrors) => true;
有人知道我应该启用或禁用HttpWebRequest上的任何选项以使其像Fiddler一样工作吗?由于实际内容似乎相同,可能在安全性/身份验证选项方面存在差异

更改Fiddler的decrypt HTTPS设置似乎不会影响任何事情,只是意味着我无法查看数据

使用HttpWebRequest以外的东西会是一种选择吗?还有哪些库不只是在后台使用HttpWebRequest?我不需要async,但是HttpClient是否使用了一个更新的库来更好地处理事情

我看过其他关于连接和提高HttpWebRequest性能的帖子,但目前我只发布了一条消息

如果有帮助,下面是标题的外观:

POST https://www.server.com/enterprise/soap?ServiceName=PassportService&auth=1 HTTP/1.1
Content-Type: text/xml; charset=utf-8
SOAPAction: http://www.server.com/ws/passport/2008/04/PassportService#publishDocumentWithParameters
Host: vha.server.com
Content-Length: 4601
Expect: 100-continue
Connection: Keep-Alive
消息的主体只是SOAP xml

下面是一些来自实施的数据

。。。然后有一些证书来回

System.Net Information: 0 : [8864] SecureChannel#63848051 - Remote certificate was verified as valid by the user.
System.Net Information: 0 : [8864] ProcessAuthentication(Protocol=Tls, Cipher=Rc4 128 bit strength, Hash=Md5 128 bit strength, Key Exchange=RsaKeyX 2048 bit strength).
System.Net.Sockets Verbose: 0 : [8864] Socket#55285825::Send()
。。。还有一些东西

System.Net Verbose: 0 : [8864] Exiting HttpWebRequest#49916336::GetRequestStream()  -> ConnectStream#7307007
System.Net Verbose: 0 : [8864] ConnectStream#7307007::Write()
System.Net Verbose: 0 : [8864] Data from ConnectStream#7307007::Write
System.Net Verbose: 0 : [8864] 00000000 : 3C 73 6F 61 70 65 6E 76-3A 45 6E 76 65 6C 6F 70 : <soapenv:Envelop

。。。对于一些带有错误信息的XML,第三方似乎无法使用这些信息来确定问题…

简单的回答是没有区别

多亏了@EricLaw的帮助,我能够排除他能想到的任何其他变量

问题是密码摘要中的时间戳。我的机器时间有点短,他们的机器时间也有点短,但情况正好相反。结果是,当我将数据粘贴到Fiddler中时,它起作用了,因为我稍微延迟了一点,但没有太多延迟。对于这些请求,有一个37秒的窗口,当它从代码运行时,它看起来就像是从未来到服务器的一段时间

当只有一个变量时,这可能就是问题所在


谢谢你的耐心和帮助埃里克

当我在web代码中运行它时,它失败了什么?它是如何失败的?您是否使用了Fiddler的比较函数来验证这两个请求是否相同?如果对请求禁用ExpectContinue,是否有更改?谢谢@Eric,失败意味着出于某种原因,第三方服务器不喜欢它并返回401未经授权的响应。是的,我比较了这两个请求,除了安全细节之外,它们是相同的,显然响应是不同的。如果我删除Expect:100 continue标头,它仍然可以工作,那么连接:Keep Alive似乎也没有必要。第三方维护了一个允许IP地址的白名单,每个方法显示为原始IP地址之间是否可能存在差异?i、 e.Fiddler只是显示为我的公共IP,这是允许的,但不知怎么的,这听起来很疯狂HttpWebRequest做了一些奇怪的事情,看起来请求来自我的内部192.168.1.1 IP地址?IPv6是否会导致问题?401 Unauthorized是提示输入凭据;403表示它不喜欢您的凭证。小提琴手的箱子里有401吗?如果一个请求是通过IPv6发送的,另一个是通过IPv4发送的,那么是的,这可能会有所不同。在Fiddler中,右键单击会话并选择“属性”。有没有提到DNSFailover?你能收集Wireshark/NetMon捕获吗?我怀疑他们可能没有严格执行HTTP代码。如果我重放相同的数据两次,我可以让Fiddler composer生成401错误,但在nonce数据上是失败的。如果数据不好,或者如果我还没有弄清楚的另一件事不好,他们就会发回401。没有,没有提到DNSFailover。是的,我可以在Wireshark中收集信息,但我没有服务器私钥来解密它。我可以在Wireshark中看到,两者都在使用IP4。
System.Net Verbose: 0 : [8864] Exiting HttpWebRequest#49916336::GetRequestStream()  -> ConnectStream#7307007
System.Net Verbose: 0 : [8864] ConnectStream#7307007::Write()
System.Net Verbose: 0 : [8864] Data from ConnectStream#7307007::Write
System.Net Verbose: 0 : [8864] 00000000 : 3C 73 6F 61 70 65 6E 76-3A 45 6E 76 65 6C 6F 70 : <soapenv:Envelop
System.Net Information: 0 : [8864] Connection#4562529 - Received status line: Version=1.1, StatusCode=401, StatusDescription=Unauthorized.
System.Net Information: 0 : [8864] Connection#4562529 - Received headers
{
Vary: Accept-Encoding
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Length: 666
Content-Type: text/xml;charset=UTF-8
Date: Thu, 07 Aug 2014 06:21:40 GMT
Server: XXXX Web Server 8
}.
System.Net Information: 0 : [8864] ConnectStream#27021036::ConnectStream(Buffered 666 bytes.)
System.Net Information: 0 : [8864] Associating HttpWebRequest#49916336 with ConnectStream#27021036
System.Net Information: 0 : [8864] Associating HttpWebRequest#49916336 with HttpWebResponse#16709290