Pergunta

Não consigo entender essa cabeça. Estou usando o httpwebrequest para tentar enviar alguns dados para outro site. Estou tentando descobrir a melhor maneira de configurar nossos firewalls, mas estou perdido. Ao assistir o NetMon Trace, parece que está ignorando o que eu digo; Os cabeçalhos HTTP que vejo saem da solicitação (não a solicitação do navegador para o meu servidor, mas a solicitação do meu servidor-remote-servidor) não se somam.

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

O TCP DSTport também parece sempre começar com o HTTP (80). Não consigo fazer com que o 443 inicialmente, não importa o quê; O SSL começa com uma negociação da porta 80 antes de começar a transmissão "real"? Para inicializar, essa solicitação parece ignorar quaisquer configurações de httpwebrequest que eu tento definir antes de iniciar a solicitação: mesmo se eu definir o HTTP 1.0 ou me manter em falso, ela ainda começa com os cabeçalhos acima.

O que está fazendo? Eu gostaria de saber como deixar passar, mas não sei por que está exibindo esse comportamento?

Código abaixo, se ajudar.

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

Eu vasculhei o Google e outros problemas de SSL/Httpwebrequest, mas não posso criar uma bala de prata.

Foi útil?

Solução

Seu problema parece ser o servidor proxy entre o seu servidor ASP.NET e o servidor remoto. Você pode tentar não usar o servidor proxy (wr.proxy = null), mas isso pode ser necessário para sua configuração de rede.

Eu recomendo conversar com quem é responsável pela rede onde está seu servidor e ver se o proxy suporta o SSL Pass-through (através do comando Connect .NET está enviando em seu nome).

Outras dicas

eu fiz HttpWebRequest liga sobre o SSL e nunca encontrei esse problema. A única coisa que posso ver que você faz que nunca fiz é incluir o número da porta (443) no URL.

.NET deve lidar com a criação da conexão SSL sem saber qual porto usar quando você usa o https protocolo. Se você ainda não o fez, tente sem o número da porta. Se você tem, então estou sem ideias;)

Experimente isso e deixe -me saber como você o encontra!

htw.credentials = new NetworkCredentials (nome de usuário, senha)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top