Pregunta

Parece que no puedo entender mi cabeza en este caso. Estoy usando HttpWebRequest para intentar enviar algunos datos a otro sitio. Estoy intentando descubrir la mejor manera de configurar nuestros cortafuegos, pero estoy perdido. Al observar el rastreo de NetMon, parece que se está ignorando lo que le digo; los encabezados HTTP que veo salen de la solicitud (no la solicitud del navegador a mi servidor, pero la solicitud de mi servidor al servidor remoto) no se suman.

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

El TCP DstPort también parece comenzar siempre con HTTP (80). Parece que no puedo manejar el 443 inicialmente, pase lo que pase; ¿SSL comienza con un puerto 80 negocia antes de que comience " real " ¿transmisión? Para iniciar, esta solicitud parece ignorar cualquier configuración de HttpWebRequest que intento establecer antes de iniciar la solicitud: incluso si configuro HTTP 1.0, o mantener vivo en falso, aún comienza con los encabezados anteriores.

¿Qué está haciendo? Me gustaría saber cómo dejarlo pasar, pero no estoy seguro de por qué muestra ese comportamiento.

Código abajo, si ayuda.

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

He rastreado Google y otros problemas de SSL / HttpWebRequest, pero no puedo encontrar una bala de plata.

¿Fue útil?

Solución

Su problema parece ser el servidor proxy entre su servidor ASP.NET y el servidor remoto. Puede intentar no usar el servidor proxy (wr.Proxy = null), pero puede ser necesario para la configuración de su red.

Recomiendo hablar con quien sea responsable de la red donde se encuentra su servidor y ver si el proxy es compatible con la transferencia de SSL (a través del comando CONECTAR .NET está enviando en su nombre).

Otros consejos

He hecho llamadas a HttpWebRequest por SSL y nunca me he encontrado con este problema. Lo único que puedo ver que haces que nunca he hecho es incluir el número de puerto (443) en la URL.

.NET debe manejar la creación de la conexión SSL sin que se le indique qué puerto usar cuando usa el protocolo https . Si aún no lo ha hecho, intente sin el número de puerto. Si tienes, entonces me quedo sin ideas;)

prueba esto y hazme saber cómo lo encuentras.

htw.Credentials = new NetworkCredentials (nombre de usuario, contraseña)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top