Существующее соединение было принудительно закрыто удаленным хостом с помощью Azure Cognitive Search на Windows Server 2008 SP2 - PullRequest
1 голос
/ 28 февраля 2020

У нас есть сайт, который получает продукты из Azure Cognitive Search. В среду, 26 февраля 2020 г., около 14:00 по восточному поясному времени мы неожиданно начали видеть следующие ошибки:

[SocketException (0x2746): существующее соединение было принудительно закрыто удаленным хостом] Система. Net .Sockets.Socket.EndReceive (IAsyncResult asyncResult) +8156963 System. Net .Sockets.NetworkStream.EndRead (IAsyncResult asyncResult) + 48

[IOException: невозможно прочитать данные из транспортного соединения: была принудительно закрыта удаленным хостом.] Система. Net .TlsStream.EndWrite (IAsyncResult asyncResult) +298 Система. Net .ConnectStream.WriteHeadersCallback (IAsyncResult ar) + 150

[WebException: Базовый соединение было закрыто: при отправке произошла непредвиденная ошибка.] System. Net .HttpWebRequest.EndGetRequestStream (IAsyncResult asyncResult, TransportContext & context) +334 System. Net .Http.HttpClientHandler.GetRequestStreamCallback 100) IAsult8 () *

Сайт работает на Windows Server 2008 SP2. После того, как о проблеме впервые сообщили, я проверил нашу промежуточную среду, и та же самая проблема произошла там также. Первоначальный тест на моей виртуальной машине разработки также показал проблему. В прошлом я сталкивался с подобными проблемами, поэтому я добавил следующее в метод Application_Start в файле проектов Global.asax.cs:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Это устранило проблему на моей виртуальной машине разработки (Windows Server 2008 R2), но когда я развернул исправление для подготовки и производства, ошибка все еще сохранялась. Основываясь на множестве различных поисков, я сделал следующее, чтобы попытаться исправить проблему:

  • Обновите платформу с 4.5.1 до 4.6.1
  • Обновите Microsoft. Azure Поиск пакета NuGet с 3.0.4 до 10.1.0
  • Обновление разделов реестра на сервере с использованием IIS Crypto
  • Развертывание всех последних исправлений безопасности (убедитесь, что с тех пор было применено KB4019276 во многих статьях)

Ничего из этого не сработало. Я использовал Wireshark на сервере и обнаружил, что при вызове Azure он использует протокол SSL, а не TLS 1.2. Я также попытался использовать HttpClient для прямого вызова Azure Search, но это привело к той же ошибке. Интересно, что есть еще один сервер в сети, который также Windows Server 2008 SP2, который не имеет проблем с вызовом Azure Поиск для загрузки продуктов в поисковый индекс через HttpClient.

Любые идеи, как мы можем получить вызов использовать TLS 1.2 вместо SSL? Ниже приведены некоторые статьи, которые я просмотрел, чтобы попытаться исправить проблему:

1 Ответ

0 голосов
/ 28 февраля 2020

Большинство этих разделов реестра в SChannel требуют полной перезагрузки ОС, а не просто перезапуска IIS. Вы не упомянули, если вы уже пробовали это в Production, но это стоит проверить, особенно если у вас есть рабочий ящик 2K8 SP2 для справки.

...