Mam aplikację, która wysyła dane do serwera za pomocą POST HTTPS. Do tego celu używam obiektu System.Net.WebClient. Oto funkcja, która wysyła jakieś dane:Jak określić protokół SSL do użycia dla klasy 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;
}
Jesteśmy przechodzącą w początku URI https: //
Zostało to działa świetnie przez długi czas. Dzisiaj zaczęliśmy uzyskiwać następujący błąd połączenia: "Połączenie podstawowe zostało zamknięte: Wystąpił nieoczekiwany błąd podczas wysyłania". Zrobiliśmy trochę rozwiązywania problemów z właścicielem serwera i ostatecznie zawęziły to do następujących. Dokonali zmiany na swoim serwerze, aby zablokować TLS 1.0, i powiedzieli, że teraz musimy wysłać nasze dane przy użyciu TLS 1.1 lub 1.2.
Co muszę ustawić w moim obiekcie WebClient (lub w innym miejscu w mojej funkcji), aby użyć TLS 1.1 lub 1.2 zamiast TLS 1.0?
Korzystamy z .NET Framework 4.5, jeśli to robi różnicę.
@CodeCaster, podczas gdy odpowiedź może być taka sama jak [to pytanie] (http://stackoverflow.com/q/26389899/372643), nie jest jasne, czy jest duplikatem. W żadnym innym pytaniu i odpowiedzi nie ma żadnej wzmianki o "WebClient", więc wyjaśnienie, w jaki sposób te klasy są powiązane, może być przydatne, a osoba pytająca i inni czytelnicy mogą być również zainteresowani potencjalnymi rozwiązaniami do ustawienia tego na podstawie poszczególnych instancji, na przykład . – Bruno
W zależności od platformy, z której korzystasz, może Cię również zainteresować [to inne pytanie] (http://stackoverflow.com/q/30479973/372643). – Bruno
@Bruno na pewno, ale na to też odpowiedziano wcześniej. Nie mogłem jednak znaleźć właściwego, a [wybrana przeze mnie] (http://stackoverflow.com/questions/26389899/) wyjaśnia to całkiem dobrze. To ponownie otwarte pytanie jest teraz podatne na używanie "System.Net.ServicePointManager.SecurityProtocol" "_ odpowiedzi bez żadnego odpowiedniego wyjaśnienia w nich, ponieważ istnieją już setki. I zgodnie z [Ustaw SecurityProtocol (Ssl3 lub TLS) na .net HttpWebRequest na żądanie] (http://stackoverflow.com/questions/3791629/), nie można ustawić go na żądanie. WebClient mimo wszystko wewnętrznie korzysta z HttpWebRequest. – CodeCaster