Запрос был прерван: не удалось создать безопасный канал SSL / TLS - PullRequest
302 голосов
/ 18 мая 2010

Мы не можем подключиться к HTTPS-серверу, используя WebRequest из-за этого сообщения об ошибке:

The request was aborted: Could not create SSL/TLS secure channel.

Мы знаем, что на сервере нет действительного сертификата HTTPS с использованным путем, но для обхода этой проблемы мы используем следующий код, который мы взяли из другого сообщения StackOverflow:

private void Somewhere() {
    ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(AlwaysGoodCertificate);
}

private static bool AlwaysGoodCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors) {
   return true;
}

Проблема в том, что сервер никогда не проверяет сертификат и не работает с вышеуказанной ошибкой. Кто-нибудь знает, что мне делать?


Я должен упомянуть, что мы с коллегой провели тесты несколько недель назад, и они работали нормально с чем-то похожим на то, что я написал выше. Единственное «основное отличие», которое мы обнаружили, заключается в том, что я использую Windows 7, а он - Windows XP. Это что-то меняет?

Ответы [ 36 ]

3 голосов
/ 27 мая 2018

У меня возникла такая же проблема, и я обнаружил этот ответ у меня сработал нормально. Ключ 3072. Эта ссылка содержит подробные сведения об исправлении "3072".

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

XmlReader r = XmlReader.Create(url);
SyndicationFeed albums = SyndicationFeed.Load(r);

В моем случае исправление требовалось для двух каналов:

https://www.fbi.gov/feeds/fbi-in-the-news/atom.xml
https://www.wired.com/feed/category/gear/latest/rss
3 голосов
/ 21 октября 2018

Попробуйте это:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
2 голосов
/ 15 мая 2015

Проблема для меня заключалась в том, что я пытался развернуть на IIS в качестве веб-службы, я установил сертификат на сервере, но у пользователя, который запускает IIS, не было правильных разрешений на сертификат.

Как предоставить ASP.NET доступ к закрытому ключу сертификата в хранилище сертификатов?

2 голосов
/ 01 июня 2019

Ответа с наибольшим количеством голосов , вероятно, будет достаточно для большинства людей.Однако в некоторых случаях вы можете продолжить получать сообщение об ошибке «Не удалось создать безопасный канал SSL / TLS» даже после принудительного использования TLS 1.2.Если это так, вы можете обратиться к этой полезной статье для дополнительных шагов по устранению неполадок.Подводя итог: независимо от проблемы версии TLS / SSL, клиент и сервер должны договориться о «наборе шифров».На этапе «рукопожатия» SSL-соединения клиент перечислит свои поддерживаемые комплекты шифров, которые сервер будет проверять по собственному списку.Но на некоторых машинах Windows некоторые общие наборы шифров могли быть отключены (по-видимому, из-за благих намерений попыток ограничить поверхность атаки), уменьшая вероятность того, что клиент и сервер согласятся на набор шифров.Если они не могут согласиться, вы можете увидеть «код фатального оповещения 40» в программе просмотра событий и «не удалось создать безопасный канал SSL / TLS» в вашей программе .NET.

В вышеупомянутой статье объясняется, как перечислить всеиз потенциально поддерживаемых комплектов шифров компьютера и включить дополнительные комплекты шифров через реестр Windows.Чтобы проверить, какие наборы шифров включены на клиенте, попробуйте посетить эту страницу диагностики в MSIE.(Использование трассировки System.Net может дать более точные результаты.) Чтобы проверить, какие наборы шифров поддерживаются сервером, попробуйте этот онлайн-инструмент (при условии, что сервер доступен через Интернет).Само собой разумеется, что Редактирование реестра должно выполняться с осторожностью , особенно когда речь идет о работе в сети.(Является ли ваша машина виртуальной машиной с удаленным размещением? Если бы вы прервали работу сети, будет ли она вообще доступна?)

В случае моей компании мы включили несколько дополнительных наборов "ECDHE_ECDSA" через редактирование реестра, чтобыисправить непосредственную проблему и защититься от будущих проблем.Но если вы не можете (или не хотите) редактировать реестр, то на ум приходят многочисленные обходные пути (не обязательно красивые).Например: ваша .NET-программа может делегировать свой SSL-трафик отдельной программе на Python (которая может сама работать, по той же причине, по которой запросы Chrome могут выполняться успешно, когда запросы MSIE не выполняются на уязвимом компьютере).

2 голосов
/ 24 сентября 2018

Этот вопрос может иметь много ответов, так как он касается общего сообщения об ошибке. Мы столкнулись с этой проблемой на некоторых наших серверах, но не на наших машинах для разработки. После удаления большинства наших волос мы обнаружили, что это ошибка Microsoft.

https://support.microsoft.com/en-us/help/4458166/applications-that-rely-on-tls-1-2-strong-encryption-experience-connect

По сути, MS предполагает, что вам нужно более слабое шифрование, но ОС исправлена ​​только для разрешения TLS 1.2, поэтому вы получаете страшное сообщение «Запрос был прерван: не удалось создать безопасный канал SSL / TLS».

Есть три исправления.

1) Патч ОС с соответствующим обновлением: http://www.catalog.update.microsoft.com/Search.aspx?q=kb4458166

2) Добавьте параметр в файл app.config / web.config.

3) Добавьте параметр реестра, который уже упоминался в другом ответе.

Все они упомянуты в статье базы знаний, которую я разместил.

1 голос
/ 18 мая 2010

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

1 голос
/ 29 октября 2014

Пока это относительно "живая" ссылка, я думал, что добавлю новую опцию. Возможно, сервис больше не поддерживает SSL 3.0 из-за проблемы с атакой Poodle. Проверьте заявление Google по этому вопросу. Я столкнулся с этой проблемой сразу с несколькими веб-сервисами и понял, что что-то должно происходить. Я перешел на TLS 1.2, и все снова работает.

http://googleonlinesecurity.blogspot.com/2014/10/this-poodle-bites-exploiting-ssl-30.html

1 голос
/ 02 июня 2016

В дополнение к ответам, приведенным выше, убедитесь, что вы импортировали сертификат CER, а НЕ файл PFX в локальное хранилище компьютеров. Распространенная ошибка, когда у вас есть оба файла.

1 голос
/ 11 июня 2015

Это происходило для меня только на одном сайте, и оказалось, что на нем был доступен только шифр RC4. Прежде чем попытаться защитить сервер, я отключил шифр RC4, и после повторного включения этот вопрос был решен.

1 голос
/ 28 сентября 2017

В моем случае у меня возникла эта проблема, когда служба Windows пыталась подключиться к веб-службе. Посмотрев события Windows, я наконец нашел код ошибки.

Событие с кодом 36888 (Schannel) повышено:

The following fatal alert was generated: 40. The internal error state is 808.

Наконец, это было связано с исправлением Windows. В моем случае: KB3172605 и KB3177186

Предложенным решением на форуме vmware было добавление записи реестра в windows. После добавления следующего реестра все работает нормально.

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ SecurityProviders \ SCHANNEL \ KeyExchangeAlgorithms \ Диффи-Хеллмана]

"ClientMinKeyBitLength" = DWORD: 00000200

Очевидно, это связано с отсутствующим значением в рукопожатии https на стороне клиента.

Список исправлений Windows:

wmic qfe list

Резьба решения:

https://communities.vmware.com/message/2604912#2604912

Надеюсь, это поможет.

...