【问题标题】:Understanding SSL connections with .NET's HttpWebRequest使用 .NET 的 HttpWebRequest 了解 SSL 连接
【发布时间】:2008-12-30 14:43:48
【问题描述】:

我似乎无法理解这一点。我正在使用 HttpWebRequest 尝试将一些数据发送到另一个站点。我试图找出配置防火墙的最佳方法,但我不知所措。通过查看 NetMon 跟踪,它似乎忽略了我告诉它的内容。我看到的 HTTP 标头从请求中发出(不是 browser-to-my-server 请求,而是 my-server-to-remote-server 请求)。

Http: Request, CONNECT some.random.url:443
Command: CONNECT
URI: some.random.url:443
    Location: some.random.url:443
ProtocolVersion: HTTP/1.1
Host: some.random.url
ProxyConnection: Keep-Alive
HeaderEnd: CRLF

TCP DstPort 似乎也总是以 HTTP(80) 开头。无论如何,我最初似乎无法让它处理 443; SSL 在开始“真正”传输之前是否从端口 80 协商开始?启动时,此请求似乎忽略了我在启动请求之前尝试设置的任何 HttpWebRequest 设置:即使我将 HTTP 1.0 或 keep-alive 设置为 false,它仍然以上述标头开始。

它在做什么?我想知道如何让它通过,但我不确定它为什么会表现出这种行为?

下面的代码,如果有帮助的话。

Uri newUri = new Uri("https://some.random.url:443/random");
System.Net.HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(newUri);
wr.Method = "POST";
wr.ContentType = "application/x-www-form-urlencoded";
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] requestBytes = encoding.GetBytes("test");
wr.ContentLength = requestBytes.Length;
System.IO.Stream stream = wr.GetRequestStream(); //FAILS HERE, ServerProtocolViolation

我搜索过 Google 和其他 SSL/HttpWebRequest 问题,但找不到灵丹妙药。

【问题讨论】:

    标签: asp.net ssl httpwebrequest


    【解决方案1】:

    您的问题似乎是您的 ASP.NET 服务器和远程服务器之间的代理服务器。您可以尝试不使用代理服务器 (wr.Proxy = null),但这可能是您的网络设置所必需的。

    我建议与负责您服务器所在网络的人员交谈,并查看代理是否支持 SSL 直通(通过 .NET 代表您发送的 CONNECT 命令)。

    【讨论】:

      【解决方案2】:

      我已经通过 SSL 完成了HttpWebRequest 调用,但从未遇到过这个问题。我能看到的唯一一件我从未做过的事情就是在 URL 中包含端口号 (443)。

      当您使用https 协议时,.NET 应该处理 SSL 连接的创建,而不会被告知要使用哪个端口。如果您还没有,请尝试不使用端口号。如果你有,那么我没有想法;)

      【讨论】:

        【解决方案3】:

        试试这个,告诉我你是怎么找到它的!

        htw.Credentials = new NetworkCredentials(用户名,密码)

        【讨论】:

          猜你喜欢
          • 2010-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多