«Запрос был прерван: не удалось создать безопасный канал SSL / TLS» в HttpWebRequest, даже после указания ServicePointManager.SecurityProtocol - PullRequest
0 голосов
/ 25 октября 2018

Чтобы соответствовать требованиям PCI, нам пришлось полностью отключить TLS 1.0 от наших серверов.С тех пор, как я это сделал, мне пришлось указывать, какой протокол использовать при отправке веб-запросов, чтобы все работало.Однако одна конкретная проблема сохраняется.Даже когда я указываю протокол, я все равно получаю ошибку, указанную в заголовке.

var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
httpWebRequest.KeepAlive = false;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11;

using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
    streamWriter.Write(body);
}

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
    var result = streamReader.ReadToEnd();
    return result;
}

Сама ошибка генерируется из строки -

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

Как видите, яЯ рекомендую использовать TLS 1.1 или 1.2 (изначально у меня был только 1.2, но думал, что разрешить 1.1 тоже поможет, но не помогло).

Дополнительно (не уверен, уместно ли это или нет)этот конкретный фрагмент кода всегда вызывает API, который мы также запускаем и поддерживаем, поэтому, по сути, сервер вызывает себя для получения необходимой информации.

И у меня быстро заканчиваются идеичто я могу попытаться отладить или исправить, так что любая помощь там будет с благодарностью.

1 Ответ

0 голосов
/ 26 октября 2018

Я наконец понял это, и решение намного проще, чем я хотел бы признать.Я просто переместил строку

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

в самый верх фрагмента кода, который я разместил в вопросе, и с тех пор все работает.Я предполагаю, что это должно быть на месте перед созданием HttpWebRequest?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...