Ho un'applicazione che invia dati a un server utilizzando un POST HTTPS. Io uso un oggetto System.Net.WebClient per fare questo. Ecco una funzione che invia alcuni dati:Come specificare il protocollo SSL da utilizzare per la classe WebClient
private byte[] PostNameValuePairs(string uri, NameValueCollection pairs)
{
byte[] response;
String responsestring = "";
using (WebClient client = new WebClient())
{
client.Headers = GetAuthenticationHeader();
string DataSent = GetNameValueCollectionValuesString(pairs);
try
{
response = client.UploadValues(uri, pairs);
responsestring = Encoding.ASCII.GetString(response);
}
catch (Exception e)
{
responsestring = "CONNECTION ERROR: " + e.Message;
return Encoding.ASCII.GetBytes(responsestring);
}
finally
{
_communicationLogger.LogCommunication(uri, client.Headers.ToString(), DataSent, responsestring);
}
}
return response;
}
Stiamo passando in un inizio URI con https: //
Questo ha lavorato grande per un lungo periodo di tempo. Oggi abbiamo iniziato a ricevere il seguente errore di connessione: "La connessione sottostante è stata chiusa: si è verificato un errore imprevisto in una trasmissione". Abbiamo risolto alcuni problemi con il proprietario del server e alla fine l'abbiamo ristretto a quanto segue. Hanno apportato una modifica al loro server per bloccare TLS 1.0 e hanno affermato che ora dobbiamo inviare i nostri dati utilizzando TLS 1.1 o 1.2.
Cosa devo impostare nel mio oggetto WebClient (o altrove nella mia funzione) per utilizzare TLS 1.1 o 1.2 invece di TLS 1.0?
Stiamo usando .NET Framework 4.5 se questo fa la differenza.
@CodeCaster, mentre la risposta potrebbe essere la stessa di [questa domanda] (http://stackoverflow.com/q/26389899/372643), non è chiaro che sia un duplicato. Non si fa menzione di 'WebClient' in quell'altra sessione di domande e risposte, quindi spiegare come queste classi sono correlate potrebbe essere utile, e il richiedente e altri lettori potrebbero anche essere interessati a potenziali soluzioni per l'impostazione di questa in base all'istanza, ad esempio . – Bruno
A seconda della piattaforma che stai utilizzando, potresti essere interessato anche a [quest'altra domanda] (http://stackoverflow.com/q/30479973/372643). – Bruno
@Bruno certo, ma anche a questo è stata data una risposta prima. Non sono riuscito a trovarne uno corretto, e [il dupe che ho selezionato] (http://stackoverflow.com/questions/26389899/) spiega tutto molto bene. Questa domanda riaperta è ora incline a _ "usare' System.Net.ServicePointManager.SecurityProtocol' "_ risposte senza alcuna spiegazione adeguata in esse, poiché ce ne sono già centinaia. E in base a [Impostare il SecurityProtocol (Ssl3 o TLS) su .net HttpWebRequest per richiesta] (http://stackoverflow.com/questions/3791629/), non è possibile impostarlo per richiesta. WebClient utilizza comunque HttpWebRequest internamente. – CodeCaster