Подтвердить что ты не робот

Как указать протокол SSL для использования для класса WebClient

У меня есть приложение, которое отправляет данные на сервер с помощью HTTPS POST. Для этого я использую объект System.Net.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;
    }

Мы передаем URI, начинающийся с https://

Это работает отлично в течение длительного времени. Сегодня мы начали получать следующую ошибку подключения: "Основное соединение было закрыто: произошла непредвиденная ошибка при отправке". Мы устранили некоторые проблемы с владельцем сервера, и они, наконец, сузили его до следующего. Они внесли изменения на свой сервер, чтобы заблокировать TLS 1.0, и сказали, что теперь нам нужно отправить наши данные, используя TLS 1.1 или 1.2.

Что мне нужно установить в моем объекте WebClient (или в другом месте моей функции), чтобы он использовал TLS 1.1 или 1.2 вместо TLS 1.0?

Мы используем .NET Framework 4.5, если это имеет значение.

4b9b3361

Ответ 1

Из предложенных других вопросов я смог решить эту проблему, добавив следующую строку в мой код:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

Это отключил TLS 1.0 от клиента, а затем сервер принял соединение.

Надеюсь, это поможет кому-то еще с той же проблемой. Хотя ответ подобен этим другим вопросам, из вопросов не было ясно, что это так, поэтому я не чувствую, что это дубликат.