Понимание SSL-соединений с помощью .NET HttpWebRequest - PullRequest
2 голосов
/ 30 декабря 2008

Кажется, я не могу разобраться с этим. Я использую HttpWebRequest, чтобы попытаться отправить некоторые данные на другой сайт. Я пытаюсь найти лучший способ настроить наши брандмауэры, но я в растерянности. Наблюдая за трассировкой NetMon, кажется, что она игнорирует то, что я ей говорю; заголовки HTTP, которые я вижу, выходят из запроса (не запрос браузера к моему серверу, а запрос сервера к удаленному серверу) не суммируются.

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, но не смог найти серебряную пулю.

Ответы [ 3 ]

4 голосов
/ 31 декабря 2008

Похоже, проблема в том, что между вашим сервером ASP.NET и удаленным сервером находится прокси-сервер. Вы можете попробовать не использовать прокси-сервер (wr.Proxy = null), но это может потребоваться для настройки вашей сети.

Я бы порекомендовал поговорить с тем, кто отвечает за сеть, в которой находится ваш сервер, и узнать, поддерживает ли прокси-сервер SSL-протокол (с помощью команды CONNECT .NET отправляет от вашего имени).

0 голосов
/ 10 июня 2009

попробуйте и дайте мне знать, как вы его нашли!

htw.Credentials = новые NetworkCredentials (имя пользователя, пароль)

0 голосов
/ 30 декабря 2008

Я сделал HttpWebRequest вызовов по SSL и никогда не сталкивался с этой проблемой. Единственное, что я вижу, что вы делаете, чего я никогда не делал, - это включаю в порт номер порта (443).

.NET должен обрабатывать создание SSL-соединения без указания, какой порт использовать при использовании протокола https. Если вы еще этого не сделали, попробуйте без номера порта. Если да, то у меня нет идей;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...