Domanda

Non riesco a capirlo. Sto usando HttpWebRequest per provare e inviare alcuni dati a un altro sito. Sto cercando di capire il modo migliore per configurare i nostri firewall, ma sono in perdita. Osservando la traccia di NetMon, sembra che stia ignorando ciò che gli dico; le intestazioni HTTP che vedo escono dalla richiesta (non la richiesta dal browser al mio server, ma la richiesta dal mio server al server remoto) non si sommano.

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

Anche il TCP DstPort sembra iniziare sempre con HTTP (80). Non riesco a convincerlo a gestire inizialmente 443, non importa quale; SSL inizia con una porta 80 negoziata prima che inizi "reale"? trasmissione? Per avviare, questa richiesta sembra ignorare tutte le impostazioni di HttpWebRequest che provo a configurare prima di avviare la richiesta: anche se ho impostato HTTP 1.0 o keep-alive su false, inizia comunque con le intestazioni sopra.

Cosa sta facendo? Mi piacerebbe sapere come farlo passare, ma non sono sicuro del perché mostri quel comportamento?

Codice di seguito, se aiuta.

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

Ho cercato su Google e altri problemi SSL / HttpWebRequest, ma non riesco a trovare un proiettile d'argento.

È stato utile?

Soluzione

Il tuo problema sembra essere il server proxy tra il tuo server ASP.NET e il server remoto. Puoi provare a non utilizzare il server proxy (wr.Proxy = null), ma potrebbe essere necessario per la configurazione della tua rete.

Consiglio di parlare con chiunque sia responsabile della rete in cui si trova il tuo server e di vedere se il proxy supporta il pass-through SSL (tramite il comando CONNECT che .NET invia per tuo conto).

Altri suggerimenti

Ho effettuato chiamate HttpWebRequest su SSL e non ho mai riscontrato questo problema. L'unica cosa che posso vedere che non hai mai fatto è includere il numero di porta (443) nell'URL.

.NET dovrebbe gestire la creazione della connessione SSL senza che venga detto quale porta utilizzare quando si utilizza il protocollo https . Se non l'hai già fatto, prova senza il numero di porta. Se hai, allora sono senza idee;)

prova questo e fammi sapere come lo trovi!

htw.Credentials = new NetworkCredentials (nome utente, password)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top