C# Обеспечение HttpWebRequest для использования Tls12 вместо SSLv3

У меня есть приложение, которое использует какой-то веб-сервис и получает данные через JSON, все работало нормально в течение достаточно долгого времени, вплоть до последних открытий о том, что SSLv3 уязвим для атак "человек посередине", и владельцы серверов навсегда отключили SSLv3., Мое приложение начало испытывать проблемы с подключением и вернуло ошибку "Запрос был прерван: не удалось установить безопасное соединение SSL/TLS". Я попытался найти решение и нашел информацию, которую я получил, чтобы добавить этот код перед созданием веб-запроса:

        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        ServicePointManager.ServerCertificateValidationCallback = delegate{ 
                    return true;
        };

К сожалению, не повезло, приложение работает так же, как и раньше, и я понятия не имею, если этот код ничего не делает или все еще есть проблемы с сервером. Информация об ошибках довольно расплывчата, и я не могу понять, где что-то идет не так.

Вот мой код

        ...
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.ContentType = GetRequestContentType();
        request.Method = method.ToString();
        request.Credentials = GetCredential(url);
        request.PreAuthenticate = true;
        CookieContainer cookieContainer = new CookieContainer();
        request.CookieContainer = cookieContainer;
        ...

Я хочу спросить, как установить Tls12, который будет использоваться по умолчанию, и убедиться, что в конце мой запрос соответствует желаемому протоколу.

Если я подтверждаю, что мое приложение нормально работает, есть ли способ получить более подробную информацию из ответа сервера и точно указать причину ошибки?

Спасибо за все ответы и предложения.

РЕДАКТИРОВАТЬ

Вторая часть вопроса решена, я нашел этот инструмент http://www.telerik.com/download/fiddler он в значительной степени позволяет увидеть, что происходит с исходящими и входящими данными. Кроме того, этот инструмент позволяет декодировать SSL-соединения, если включить эту опцию, мое приложение начнет работать. Я предполагаю, что это приложение делает что-то, что делает возможным обмен данными между моим приложением и хостом назначения. Но я до сих пор понятия не имею, что это может быть. И как заставить мое приложение правильно обрабатывать эти соединения.

1 ответ

Решение

Отчаяние заставило меня проверить весь исходный код (часть, ответственная за получение данных из Интернета, была третьей стороной, и до тех пор, пока она не заработала, не было причин менять ее), и я обнаружил эту строку

request.Credentials = GetCredential(url);

называется метод, который в своем теле имел

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

Так что все мои попытки изменить это значение до создания httpwebrequest был перезаписан Изменение SecurityProtocolType на Tls12 заставляет все это работать сейчас.

Другие вопросы по тегам